Nenad
~Choco Coronet~ Omnomnom
- Reaction score
- 137
Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.ArrayList;
public class Search{
public static ArrayList position(String word, String[] wordlist){
ArrayList<Integer> list = new ArrayList<Integer>();
int counter = 0;
String one = "";
String q = "?";
for (int i = 0; i<wordlist.length; i++)
{
if (word.substring(0,1).compareTo(wordlist[i].substring(0, 1)) == 0 || word.substring(0,1).compareTo(q) == 0)
{
if (word.compareTo(wordlist[i]) == 0)
{
list.add(counter);
counter = counter + wordlist[i].length() + 1;
}
else if (word.contains(q) && word.length() == wordlist[i].length())
{
one = wordlist[i];
for (int j = 0; j<word.length(); j++)
{
if(word.charAt(j) == '?')
{
one = one.substring(0,j) + "?" + one.substring(j+1);
if (word.compareTo(one) == 0)
{
list.add(counter);
counter = counter + wordlist[i].length() + 1;
break;
}
}
}
if(!(word.compareTo(one) == 0))
{
counter = counter + wordlist[i].length() + 1;
}
}
else
counter = counter + wordlist[i].length() + 1;
}
else
counter = counter + wordlist[i].length() + 1;
}
return list;
}
public static void main(String[] args){
try{
BufferedReader in;
if (args.length > 0) {
try {
in = new BufferedReader(new FileReader(args[0]));
}
catch (FileNotFoundException e) {
System.out.println("Can't open file " + args[0]);
return;
}
}
else {
in = new BufferedReader(new InputStreamReader(System.in));
}
StringTokenizer st = new StringTokenizer(in.readLine());
String[] word = new String[st.countTokens()];
int i=0;
while(st.hasMoreTokens()) word[i++]=st.nextToken();
String searchword= in.readLine();
while(searchword!=null){
searchword=searchword.trim();
System.out.print(searchword+":");
ArrayList pos = position(searchword, word);
int[] posi = new int[pos.size()];
for(i=0;i<posi.length;i++)posi[i]=((Integer)pos.get(i)).intValue();
Arrays.sort(posi);
for(i=0;i<posi.length;i++) System.out.print(" "+posi[i]);
System.out.println();
searchword=in.readLine();
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
So, what the code does is search a sentence and return the position of the words in that sentence, as an example:
Input:
hello this is a sentence to test the code so that the code can test the code
hello
code
is
thi?
?el??
??u??
Output:
hello: 0
code: whatever whatever whatever
etc.
There are two things to know - the sentence consists of letters from a-z and blank spaces, and the searchwords can have ?, where ? represents any letter from a-z. Hence, is and it would return both if the searchword was i?
The code works perfectly, but it takes some time. If anyone feels like showing me how i could optimize this code to take less time I'd be happy to learn, but if not don't sweat it.