Usando o scanner em java, como posso hasnext (adstring), onde a string não é o padrão regex?

StackOverflow https://stackoverflow.com/questions/1506249

  •  19-09-2019
  •  | 
  •  

Pergunta

Estou tentando fazer o que minha pergunta afirma, então eu tenho o seguinte código que encontraria a correspondência.

String test = scan.next();
if (test.equals("$let"))
return 1;

No entanto, eu preferiria usar o HasNext para não consumir um token; No entanto, quando eu faço o seguinte, ele falha.
if (scan.hasNext("$let"))
return 1;

Percebo que, ao dar, a próxima variável espera um padrão, mas pensei que, se não tiver nenhum símbolo de regex, deve funcionar. Eu também pensei que $ era possivelmente um símbolo regex, então tentei /$, no entanto, isso não funcionou!

Obrigado pela ajuda!

Foi útil?

Solução

Você deve usar $ para escapar do regex, mas é mais fácil obter o próximo () e salvar o resultado.

Outras dicas

Em geral, se você tem alguma string arbitrária que deseja combinar literalmente sem significados para qualquer metacaracter regex, você pode usar java.util.Pattern.quote.

Scanner sc = new Scanner("$)}**");
System.out.println(sc.hasNext(Pattern.quote("$)}**"))); // prints "true"
System.out.println(sc.hasNext("\\Q$)}**\\E")); // prints "true"
System.out.println(sc.hasNext("$)}**")); // throws PatternSyntaxException

Você também pode usar o \Q e \E marcadores de cotação, mas é claro que você precisa garantir que a sequência citada não deve conter \E.

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