Pregunta

¿Cómo se configura el delimitador de un escáner en ;o nueva línea?

Lo intenté: Scanner.useDelimiter(Pattern.compile("(\n)|;"));Pero no funciona.

¿Fue útil?

Solución

Como regla general, en los patrones, es necesario duplicar el \.

Entonces, intenta

Scanner.useDelimiter(Pattern.compile("(\\n)|;"));`

o

Scanner.useDelimiter(Pattern.compile("[\\n;]"));`

Editar:Si \r\n Cuál es el problema, quizás quieras probar esto:

Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+"));

que coincide con uno o más de \r, \n, y ;.

Nota:No los he probado.

Otros consejos

A medida que has descubierto, lo necesario para buscar separadores \r\n estilo DOS / red de línea (CRLF) en lugar de la \n estilo Unix (LF solamente). Pero lo que si el texto contiene tanto? Eso pasa mucho; de hecho, cuando veo la fuente de esta misma página Veo ambas variedades.

Se debe adquirir el hábito de mirar para ambos tipos de separador, así como la mayor \r estilo Mac (CR solamente). Aquí hay una manera de hacerlo:

\r?\n|\r

El tapar que en su código de ejemplo que se obtiene:

scanner.useDelimiter(";|\r?\n|\r");

Esto es suponiendo que desea hacer coincidir exactamente un salto de línea o punto y coma en un momento. Si desea hacer coincidir un o más usted puede hacer esto en su lugar:

scanner.useDelimiter("[;\r\n]+");

Nota, también, cómo pasé de una serie de expresiones regulares en lugar de un patrón; todas las expresiones regulares consiguen en caché de forma automática, por lo que pre-compilar la expresión regular no le consigue ninguna mejora en el rendimiento.

En cuanto a la observación de la OP, parece que era una línea diferente final (\ r \ n o CRLF) que era el problema.

Aquí está mi respuesta, lo que manejar múltiples puntos y comas y los finales de línea en cualquier formato (pueden o no desear)

Scanner.useDelimiter(Pattern.compile("([\n;]|(\r\n))+"));

por ejemplo. un archivo de entrada que es similar al siguiente:

1


2;3;;4
5

resultaría en 1,2,3,4,5

Me trató normales \ ny \\ n - tanto trabajado en mi caso, aunque estoy de acuerdo si necesita una barra invertida normal que se desee duplicar, ya que es un carácter de escape. Lo que pasa es que en este caso, "\ n" se convierte en el carácter deseado con o sin el extra '\'

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