Pergunta

Eu preciso coincidir com certas coisas de linhas de um texto de entrada. As linhas parecido com este:

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

Eu estou usando a classe Scanner para ler cada linha do texto, e eu escrevi o seguinte código. No entanto, algo não está funcionando corretamente, porque o padrão de "para" não é comparado com a linha, e deve ser, porque "a" está contido na linha (eu tentei corresponder não só "para" a partir da linha, mas partidas nada):

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

Output:

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)

Eu tenho mais uma pergunta: como posso processar a linha para que eu armazenar tudo, desde o início da linha até o primeiro símbolo "/"? Eu não poderia encontrar qualquer método para que no API. É possível fazê-lo? Basicamente, eu quero consecutivamente para atravessar a linha, loja de peças da linha em diferentes variáveis, e, em seguida, usar os valores destas variáveis. Desde que eu não sei quantos símbolo tenho antes do primeiro símbolo "/", eu não posso usar next () um certo número de vezes.

Agradecemos antecipadamente.

Foi útil?

Solução

tentativas .matches() para coincidir com o inteira string de entrada. Use .find() se você quer combinar uma parte da cadeia de entrada, ou .lookingAt() se você quiser combinar com o começo da seqüência de entrada.

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

Além disso, se você expandir o seu padrão para incluir grupos correspondentes (ver referência regex geral para obter mais detalhes sobre os grupos como correspondência de trabalho), você pode usar a função .group() após uma partida bem sucedida para recuperar o substring combinada por um grupo específico dentro o padrão.

Outras dicas

Você poderia extrair a parte que você precisa para os tokens usando:

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

e, em seguida, looping em cima disso para extrair os tokens usando

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

Obviamente, você não iria ligar as peças acima de certo código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top