Frage

brauche ich bestimmte Dinge aus den Zeilen eines Eingangstext übereinstimmen. Die Zeilen wie folgt aussehen:

 to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}

Ich bin mit der Scanner-Klasse jede Zeile des Textes zu lesen, und ich habe den folgenden Code geschrieben. Doch etwas nicht richtig funktioniert, weil das Prasseln „bis“ nicht gegen die Linie angepasst, und es sollte sein, weil „bis“ wird in der Zeile enthalten ist (Ich habe versucht, nicht nur zu entsprechen „um“ von der Linie, aber nichts passt):

 Scanner scanner = new Scanner(file);
 while(scanner.hasNext()) {
      String line = scanner.nextLine();
      System.out.println("line: " + line);
      Pattern p_pos = Pattern.compile("to");
      Matcher m_pos = p_pos.matcher(line);
      String match = m_pos.group(0);
      System.out.println("match: " + match);
      boolean b_pos = m_pos.matches();
      if(b_pos) {
          System.out.println(match);
      }
 }

Ausgabe:

line:    to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}
Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at lady.PhrasesFromFile.readFile(PhrasesFromFile.java:31)
    at lady.PhrasesFromFile.main(PhrasesFromFile.java:17)

Ich habe noch eine Frage: wie kann ich die Linie verarbeiten, so dass ich alles von Anfang an von der Linie bis zum ersten „/“ Symbol speichern? Ich konnte keine Methode für die in der API. Ist es möglich, dies zu tun? Ich mag im Grunde nacheinander durch die Leitung, zu speichern Stücke der Linie in verschiedenen Variablen gehen, und dann die Werte dieser Variablen verwenden. Da ich weiß nicht, wie viele Token ich vor dem ersten Symbol „/“ habe, kann ich nicht weiter verwenden (), um eine bestimmte Anzahl von Zeiten.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

.matches() versucht, die gesamte Eingabezeichenfolge übereinstimmen. Verwenden Sie .find(), wenn Sie einen Teil der Eingabezeichenfolge übereinstimmen soll, oder .lookingAt() wenn Sie den Anfang der Eingabezeichenfolge übereinstimmen soll.

http: // java .sun.com / j2se / 1.4.2 / docs / api / java / util / regex / Matcher.html

Auch wenn Sie Ihr Muster erweitern Gruppen mit passenden (siehe allgemeiner regex Referenz für weitere Details, wie passende Gruppen arbeiten), können Sie die .group() Funktion nach einem erfolgreichen Spiel können den Teil von einer bestimmten Gruppe angepasst abzuzurufen innerhalb das Muster.

Andere Tipps

Sie können den Teil extrahieren Sie müssen für die Tokens durch die Verwendung:

String tokenSection = Pattern.compile("(to\\s+.*?)/").matcher(line).find().group(1);

und dann über die Schleife die Token zu extrahieren mit

Pattern.compile("\\w+").matcher(tokenSection).find();

Natürlich würden Sie nicht die oben genannten Teile des Codes stecken rechts in.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top