In: Computer Science
Input:
StringManipulation.java:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class StringManipulation { //Define a class
String stringtomatch; //Member variable for storing string for matching
List<SentenceData> sentences = new ArrayList<>(); //List for storing matched strings
StringManipulation(String stringtomatch) //Parameterized constructor
{
this.stringtomatch = stringtomatch;
}
String readFile(String filename) //Read file and return string
{
try {
InputStream is = new FileInputStream(filename); //Create input stream
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //Load stream into buffer
String line = br.readLine(); //Read first line
StringBuilder sb = new StringBuilder(); //Create a string builder object to store multiple lines into one
while(line != null){ //Iterate over input text
sb.append(line).append(" "); //Append each line to string builder
line = br.readLine();
}
return sb.toString(); //Return string
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
void insertString(SentenceData sentence){
int index = 0; //initialize index
for(SentenceData data: sentences) //Iterate over list of objects
{
if (data.frequence > sentence.frequence) //Check if frequency is higher than new object
{
break;
}
index++;
}
sentences.add(index, sentence); //Insert element at given index
}
void matchTokens(String data)
{
StringTokenizer tokenizer = new StringTokenizer(data, "."); //Split string by sentences
while (tokenizer.hasMoreTokens()) //Iterate over list of tokens
{
String line = tokenizer.nextToken(); //Store sentence in a string
if (line.contains(stringtomatch)) //Check if string has matching substring
{
//Insert line in the list along with frequency
insertString(new SentenceData(line, line.split(stringtomatch).length - 1));
}
}
}
void displayStrings()
{
for(SentenceData data: sentences) //Iterate over objects in the list
{
//Print string and frequency
System.out.println("String: "+data.Sentence+"\nFrequency: "+data.frequence);
System.out.println("-------------------------");
}
}
public static void main(String[] args)
{
/*
Create an object of class and initialize substring
*/
StringManipulation manip = new StringManipulation("but the");
String data = manip.readFile("input.txt"); //Fetch file as a single string
manip.matchTokens(data); //Split string into sentences and store ones that match
manip.displayStrings(); //Display each string with frequency
}
class SentenceData{ //Data class for sentence
String Sentence;
int frequence;
SentenceData(String Sentence, int frequence)
{
this.Sentence = Sentence;
this.frequence = frequence;
}
}
}
input.txt:
Darwin was conducting a grave experiment. He had figured out almost all parts of the equation but the only thing yet to be proven was the dual nature of light. He showed his work to scholars but his efforts did not come to fruition. He decided to meet with Ingstad but there was a catch. Ingstad wasn't a gregarious person.
Output:
In Text Format:
String: He had figured out almost all parts of the equation but
the only thing yet to be proven was the dual nature of light
Frequency: 1
-------------------------
String: He decided to meet with Ingstad but there was a catch
Frequency: 1
-------------------------
Brief Explanation: