2017-02-22 9 views
1

Я делаю это с почти прошлых нескольких дней, но все еще не могу получить требуемый результат. Ну, у меня есть массив wordlist[]={"One","Two","Three","Four","Five"}; , а затем я беру ввод от пользователя.Поиск ключевого слова из массива во входной строке и их печать

String input="I have three no, four strings"; 

Теперь то, что я хочу сделать, это выполнить операцию поиска по строке для проверки слов, доступных в словник массива []; Как и в приведенном выше примере, входная строка содержит слова три и четыре, которые присутствуют в массиве. , чтобы он мог печатать эти слова из массива, доступного в строке, и если слова из списка слов [] недоступны, тогда он должен печатать «No Match Found».

Вот мой код, я поражен этим. Пожалуйста

import java.util.regex.*; 
import java.io.*; 
class StringSearch{ 
    public static void main(String ...v)throws IOException{ 
     BufferedReader cin = new BufferedReader(new InputStreamReader(System.in)); 
     String wordlist[]={"one","two","three","four","five"}; 
     String input=cin.readLine(); 
     int i,j; 
     boolean found; 
     Pattern pat; 
     Matcher mat; 
     Pattern spliter=Pattern.compile("[ ,.!]"); 
     String ip[]=spliter.split(input); 
     System.out.println(ip[2]); 
     for(i=0; i<wordlist.length;i++){ 
      for(j=0;j<ip.length;j++){ 
       pat=Pattern.compile("\b"+ip[j]+"\b"); 
       mat=pat.matcher(wordlist[i]); 
       if(){ 
         // No Idea What to write here 
       } 
      } 
     } 


    } 
} 
+0

в случае условия put 'mat.matches()'. В том случае, если тело увеличивает число целых чисел и использует его за пределами циклов for, чтобы напечатать «no match found» в случае совпадения нуля. Также проверьте, что '' \ b "+ ip [j] +" \ b "' regex, это не работает для меня – Oneiros

+1

@Oneiros 'matches' добавить'^'и' $ ', поэтому должно быть полное соответствие –

ответ

5

Вы должны использовать matches с условием input.matches(".*\\b"+wordlist[i]+"\\b.*")

.*: матч ничего

\\b: граница слова, чтобы избежать согласования four с fourteen

и wordlist[i] ваше слово

1.) Траверса ваш массив, используя цикл

2.) Выберите слова из массива и использовать matches с данным регулярных выражений, чтобы избежать согласования с fourfourteen

String wordlist[]={"one","two","three","four","five"}; 
    String input="I have three no, fourteen strings"; 
    int i; 
    boolean found=false; 
    // Traverse your array 
    for(i=0; i<wordlist.length;i++){ 
      // match your regex containing words from array against input 
      if(input.matches(".*\\b"+wordlist[i]+"\\b.*")){ 
       // set found = true 
       found=true; 
       // display found matches 
       System.out.println(wordlist[i]); 
      } 
     } 
    // if found is false here then mean there was no match 
    if (!found) { 
     System.out.println("No Match Found"); 
    } 

Выход:

three 
+0

** Большое вам спасибо за помощь .. это сработало для меня .... –

+0

@IVANPAUL Я рад, что могу помочь, счастливое кодирование –

1

Использование Потоки Java8 вы можете сделать:

... 
import java.util.Arrays; 
import java.util.stream.Collectors; 
... 

String wordlist[]={"one","two","three","four","five"}; 
String input=cin.readLine(); 
String foundStrings = 
     Arrays.stream(wordlist) 
     .filter(s->input.matches(".*\\b"+s+"\\b.*")) 
     .collect(Collectors.joining("\n")); 

System.out.print(foundStrings.isEmpty() ? "No Match Found\n": foundStrings); 
+0

Эй, спасибо за это, он показывает различные ошибки, когда я попробовал компиляцию ваш код. Какое обновление java 8 мне нужно использовать, чтобы сделать ошибку кода я в настоящее время использую обновление 77. показывая, не может найти ошибки символов на ** Collectors ** и ** Arrarys **. –

+0

Вам нужно импортировать 'import java.util.stream.Collectors;' и 'import java.util.Arrays;' Я изменю код, чтобы его отразить. – Teudimundo

+0

Спасибо, Fella. Я совершенно новичок в потоках. Большое спасибо –

0

Здесь мы создаем регулярное выражение: \\ b (один | два | три | четыре | пять) \\ b и проверяем счетчик совпадений.

String wordlist[]={"one","two","three","four","five"}; 
String input="I have three no, fourteen strings"; 

StringBuilder regexBuilder = new StringBuilder("\\b").append("(").append(String.join("|", wordlist)).append(")").append("\\b"); 
String regexExp = regexBuilder.toString(); 
regexBuilder.setLength(0); 

Pattern p = Pattern.compile(regexExp); 
Matcher matcher = p.matcher(input); 

int count = 0; 
while (matcher.find()) 
{ 
     System.out.println(matcher.group()); 
     count++; 
} 

if(count == 0){ 
    System.out.println("No Match Found"); 
} 
Смежные вопросы