2017-02-22 1 views
1

Ich mache dies seit fast letzten Tagen, aber immer noch nicht in der Lage, eine erforderliche Ausgabe zu erhalten. Nun, ich habe ein Array sagen wordlist[]={"One","Two","Three","Four","Five"}; und dann nehme ich die Eingabe vom Benutzer.Suchen Sie ein Schlüsselwort aus einem Array in einer Eingabezeichenfolge und drucken Sie sie

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

Nun, was ich tun möchte, ist eine Suchoperation auf der Saite führt für die Worte in der Array Wortliste [] zu überprüfen; Wie im obigen Beispiel enthält die Eingabezeichenfolge die Wörter drei und vier, die im Array vorhanden sind. also sollte es in der Lage sein, diese Wörter aus dem Array zu drucken, das in der Zeichenfolge verfügbar ist, und wenn keine Wörter aus der Wortliste [] verfügbar sind, sollte es "No Match Found" drucken.

Hier ist mein Code Ich bin davon betroffen. Bitte

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

in der if-Bedingung put 'mat.matches()'. Im if body inkrementiere eine zählende ganze Zahl und verwende sie außerhalb der for-Schleifen, um "no match found" im Falle von Null-Übereinstimmungen zu drucken. Überprüfen Sie auch, dass '" \ b "+ ip [j] +" \ b "' Regex, es funktioniert nicht für mich – Oneiros

+1

@Oneiros 'Übereinstimmungen' hinzufügen '^' und '$' so sollte es das komplette Spiel sein –

Antwort

5

Sie müssen matches mit Bedingung verwenden input.matches(".*\\b"+wordlist[i]+"\\b.*")

.*: nichts gefunden

\\b: Wort four mit fourteen

und wordlist[i] zu vermeiden Grenze passend ist Ihr Wort

1.) Traverse Array-Schleife

2.) Wählen Sie Wörter aus dem Array und verwenden matches mit bestimmten regex passend four mit fourteen

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"); 
    } 

Ausgabe zu vermeiden:

three 
+0

** Vielen, vielen Dank ** für die Hilfe .. es funktionierte für mich .... –

+0

@IVANPAUL ich bin froh, dass ich helfen konnte, Happy Coding –

1

Verwendung Java8 Streams, die Sie tun können:

... 
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

Hey vielen Dank dafür, es zeigt verschiedene Fehler, wenn ich compiling versuchte dein Code. Welches Update von Java 8 muss ich verwenden, um den Code fehlerfrei zu machen? Ich verwende derzeit Update 77. Das Anzeigen von Symbolfehlern auf ** Collectors ** und ** Arrarys ** ist nicht möglich. –

+0

Sie müssen importieren 'import java.util.stream.Collectors;' und importieren java.util.Arrays; 'Ich werde den Code ändern, um es widerzuspiegeln. – Teudimundo

+0

Danke fella. Ich bin völlig neu in Streams. Vielen Dank –

0

Hier eine Regex vorbereiten: \\ b (eins | zwei | drei | vier | fünf) \\ b und die Anzahl der Matcher überprüfen.

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"); 
} 
Verwandte Themen