2016-06-11 6 views
2

Also, ich habe in dem die Zeile ein Wort in einem Dokument und drucken Sie findet das Wort wie folgt vorliegt:, wie ich einen Token in einem Array finden [i]

sagen Beispieldatei enthält: " Der schnelle braune Fuchs springt über den faulen Hund. Jagdhunde lieben meine große Sphinx aus Quarz. "

Und wenn ich nach 'fox' suche, dann enthält linewords [] Zeichen vom ersten Satz. und Linienwörter [3] = Fuchs. Um die Farbe des Fuchses zu drucken, brauche ich Linienwörter [2]. Ich frage mich, wie können wir das 'ich' eines Token in diesem Linewords [i] erhalten, weil ich möchte, dass die Ausgabe Lineuwwords [i-1]

+0

Möchten Sie das letzte Wort aus der Zeile entfernen? –

+0

Ich möchte das Wort vor dem Wort, das ich gesucht habe, ausdrucken! Ich habe gerade ein Beispiel hinzugefügt. –

+0

Soll es das gleiche Ergebnis geben, wenn es eine neue Linie zwischen Braun und Fuchs gibt? – joel314

Antwort

1

Das durch das Durchlaufen des Arrays getan werden kann, und wenn Sie das Wort erhalten, die man vor it.Here die drucken, wie: -

if(lineWords[0].equals(testWord) 
return;//no preceding word 

    for(int i=1;i<lineWords.length;i++){ 
    if(lineWords[i].equals(testWord){ 
    System.out.println(lineWords[i-1]); 
    break; 
    } 
    } 
+0

Ich denke das Problem ist, wenn ein Wort mehr als einmal im Array enthalten ist –

+1

In diesem Fall brechen Sie nicht die Schleife –

+0

diese Lösung funktioniert gut! Danke :) –

2

Sie könnten eine hashMap verwenden, die das Wort und a speichert Liste mit den Indizes.

HashMap<String, List<Integer>> indices = new HashMap<>(); 

So in der for Schleife füllen Sie das HashMap:

for(int i=0;i<lineWords.length;i++){ 
     String word = lineWords[i]; 
     if (!indices.contains(word)) { 
      indices.put(word, new ArrayList<>(); 
     } 
     indices.get(word).add(i); 
    } 

Um alle Indizes eines bestimmten Wortes Anruf zu erhalten:

List<Integer> indicesForWord = indices.get("fox"); 

Und das i - 1 Wort Anruf zu bekommen:

for (int i = 0; i < indicesForWord.size(); i++) { 
     int index = indicesForWord[i] - 1; 
     if (index >= 0 || index >= lineWords.length) { 
      System.out.println(lineWords[index]); 
     } 
    } 
+0

Danke für die Lösung, aber ich habe HashMap bisher noch nie benutzt! –

+1

Okay dann versuch es zu benutzen :) weil es im Vergleich zu Listen sehr gute Zugriffszeiten hat. –

2

Wenn Sie Java 8, verwenden, ist es ganz einfach:

List<String> words = Files.lines(Paths.get("files/input.txt")) 
     .flatMap(line -> Arrays.stream(line.split("\\s+"))) 
     .collect(Collectors.toList()); 

    int index = words.indexOf("fox"); 
    System.out.println(index); 

    if(index>0) 
     System.out.println(words.get(index-1)); 

Diese Lösung funktioniert auch, wenn das Wort, das Sie suchen, die ersten Wörter in einer Zeile ist. Ich hoffe, es hilft!

Wenn Sie alle Vorkommen suchen müssen, können Sie die indexOfAll Methode von this post verwenden.