Usando lo scanner in java come posso hasnext (astring) dove la stringa non è il modello di regex?
-
19-09-2019 - |
Domanda
Sto cercando di fare come afferma la mia domanda, quindi ho il seguente codice che troverebbe la partita.
String test = scan.next();
if (test.equals("$let"))
return 1;
Tuttavia, preferirei usare Hasnext per non consumare un token; Tuttavia, quando lo faccio non fallisce.
if (scan.hasNext("$let"))
return 1;
Mi rendo conto che When Done ha la prossima variabile si aspetta uno schema, ma ho pensato che se non ho simboli di regex dovrebbe funzionare. Ho anche pensato che $ fosse forse un simbolo regex, quindi ho provato /$ comunque, che non ha funzionato!
Grazie per l'aiuto!
Soluzione
Dovresti usare $ per sfuggire al regex, ma è più facile ottenere il prossimo () e salvare il risultato.
Altri suggerimenti
In generale, se hai una stringa arbitraria che si desidera abbinare letteralmente senza significati a qualsiasi metacharacters regex, puoi usare 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
Puoi anche usare il \Q
e \E
marcatori di citazione, ma ovviamente devi assicurarti che la stringa citata non debba contenere essa stessa \E
.