Usando o scanner em java, como posso hasnext (adstring), onde a string não é o padrão regex?
-
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!
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
.