Uso del escáner en Java ¿Cómo puedo hasNext (astring) donde la cadena no es el patrón regex?

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

  •  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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top