¿Cómo uso un delimitador en Java Scanner?

sc = new Scanner(new File(dataFile)); sc.useDelimiter(",|\r\n"); 

No entiendo cómo funciona el delimitador, ¿alguien puede explicar esto en términos simples?

El escáner también puede usar delimitadores que no sean espacios en blanco.

Ejemplo sencillo de la API de escáner :

  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(); 

El punto es entender las expresiones regulares ( regex ) dentro del Scanner::useDelimiter . Encuentre un tutorial useDelimiter aquí .


Para comenzar con las expresiones regulares aquí, puede encontrar un buen tutorial.

Notas

 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 [az] 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 

Con Scanner, los delimitadores por defecto son los espacios en blanco.

Pero Scanner puede definir dónde comienza y termina un token en función de un conjunto de delimitadores , que se pueden especificar de dos maneras:

  1. Usando el método del escáner: useDelimiter (String pattern)
  2. Usando el método del escáner: useDelimiter (Pattern pattern) donde Pattern es una expresión regular que especifica el conjunto de delimitadores.

Así que los métodos useDelimiter() se utilizan para tokenizar la entrada del escáner, y se comportan como clase StringTokenizer , eche un vistazo a estos tutoriales para obtener más información:

  • Configuración de delimitadores para escáner
  • Método Java.util.Scanner.useDelimiter ()

Y aquí hay un Ejemplo :

 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(); } 

Imprime esta salida:

 Anna Mills Female 18 

Por ejemplo:

 String myInput = null; Scanner myscan = new Scanner(System.in).useDelimiter("\\n"); System.out.println("Enter your input: "); myInput = myscan.next(); System.out.println(myInput); 

Esto le permitirá usar Enter como delimitador.

Por lo tanto, si ingresas:

 Hello world (ENTER) 

imprimirá ‘Hola mundo’.