Uso del escáner en Java ¿Cómo puedo hasNext (astring) donde la cadena no es el patrón regex?
-
19-09-2019 - |
Pregunta
Estoy tratando de hacer lo que afirma mi pregunta, entonces tengo el siguiente código que encontraría la coincidencia.
String test = scan.next();
if (test.equals("$let"))
return 1;
Sin embargo, preferiría usar Hasnext para no consumir un token; Sin embargo, cuando hago lo siguiente, falla.
if (scan.hasNext("$let"))
return 1;
Me doy cuenta de que Give tiene a continuación una variable que espera un patrón, pero pensé que si no tengo ningún símbolo regex, debería funcionar. También pensé que $ era posiblemente un símbolo de regex, así que probé /$, sin embargo, ¡eso no funcionó!
¡Gracias por la ayuda!
Solución
Debe usar $ para escapar de Regex, pero es más fácil obtener el siguiente () y guardar el resultado.
Otros consejos
En general, si tiene alguna cadena arbitraria que desea igualar literalmente sin significados a ningún metacharacteres regex, puede 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
También puedes usar el \Q
y \E
Marcadores de citas, pero, por supuesto, debe asegurarse de que la cadena citada no debe contener en sí misma \E
.