sc = new Scanner(new File(dataFile));
sc.useDelimiter(",|\r\n");
Non capisco come funziona il delimitatore, qualcuno può spiegarlo in parole povere?Come utilizzare un delimitatore nello scanner Java?
sc = new Scanner(new File(dataFile));
sc.useDelimiter(",|\r\n");
Non capisco come funziona il delimitatore, qualcuno può spiegarlo in parole povere?Come utilizzare un delimitatore nello scanner Java?
Lo scanner può anche utilizzare delimitatori diversi da spazi vuoti.
Facile esempio dalla Scanner API:
String input = "1 fish 2 fish red fish blue fish";
// \\s* means 0 or more repetitions of any whitespace character
// fish is the pattern to find
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt()); // prints: 1
System.out.println(s.nextInt()); // prints: 2
System.out.println(s.next()); // prints: red
System.out.println(s.next()); // prints: blue
// don't forget to close the scanner!!
s.close();
Il punto è capire le espressioni regolari (regex
) all'interno del Scanner::useDelimiter
. Trova un useDelimiter
tutorial here.
Per iniziare con le espressioni regolari here you can find un bel tutorial.
abc… Letters
123… Digits
\d Any Digit
\D Any Non-digit character
. Any Character
\. Period
[abc] Only a, b, or c
[^abc] Not a, b, nor c
[a-z] Characters a to z
[0-9] Numbers 0 to 9
\w Any Alphanumeric character
\W Any Non-alphanumeric character
{m} m Repetitions
{m,n} m to n Repetitions
* Zero or more repetitions
+ One or more repetitions
? Optional character
\s Any Whitespace
\S Any Non-whitespace character
^…$ Starts and ends
(…) Capture Group
(a(bc)) Capture Sub-group
(.*) Capture all
(ab|cd) Matches ab or cd
Cosa fa *? – NoMoreErrors
'*' significa ** Zero o più ripetizioni ** controlla il mio aggiornamento e il link fornito nella risposta;) –
Puoi spiegare questo? '" \\ s * fish \\ s * "' grazie. – UnKnown
con scanner i delimitatori di default sono i caratteri di spaziatura.
Ma Scanner può definire dove un token inizia e termina basato su un insieme di delimitatore, goduto possono essere specificati in due modi:
Così useDelimiter()
metodi sono utilizzati per tokenize all'ingresso scanner, e si comportano come StringTokenizer class, dare un'occhiata a questi tutorial per ulteriori informazioni:
E ecco un Example:
public static void main(String[] args) {
// Initialize Scanner object
Scanner scan = new Scanner("Anna Mills/Female/18");
// initialize the string delimiter
scan.useDelimiter("/");
// Printing the tokenized Strings
while(scan.hasNext()){
System.out.println(scan.next());
}
// closing the scanner stream
scan.close();
}
Stampe questa uscita:
Anna Mills
Female
18
Per esempio:
String myInput = null;
Scanner myscan = new Scanner(System.in).useDelimiter("\\n");
System.out.println("Enter your input: ");
myInput = myscan.next();
System.out.println(myInput);
Questo vi permetterà di utilizzare Inserisci come delimitatore.
Così, se si immette:
Hello world (ENTER)
stamperà 'Ciao mondo'.
qui, ecco come funziona: http: // javatutorialhq.com/java/util/scanner-class-tutorial/usedelimiter-string-pattern-method-example/ – nafas
Come javadoc dice "interrompe il suo input in token usando un pattern delimitatore, che corrisponde per default allo spazio bianco. I token risultanti possono essere convertiti in valori di diverso tipo usando i vari metodi successivi ". Non è chiaro? – ema
@ ema - Presumo che fosse ironico perché è chiaro solo se già "capisci come funziona il delimitatore" e NoMoreErrors NON lo fa. Ad esempio, quale "pattern delimitatore" potrebbe semplicemente non chiarire quello che hai detto, che sicuramente non è sbagliato, solo non utile alla Q. Ma almeno non hai insultato NoMoreErrors come fanno molti, con gioia , Immagino. – DSlomer64