Domanda

Come si imposta il delimitatore per uno scanner su ;o nuova linea?

Ho provato: Scanner.useDelimiter(Pattern.compile("(\n)|;"));Ma non funziona.

È stato utile?

Soluzione

Come regola generale, negli schemi, è necessario raddoppiare il \.

Allora prova

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

O

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

Modificare:Se \r\n è il problema, potresti provare questo:

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

che corrisponde a uno o più di \r, \n, E ;.

Nota:Non li ho provati.

Altri suggerimenti

Come hai scoperto, avevi bisogno di cercare \r\n stile DOS / network (CRLF) Linea separatori invece dello stile \n Unix (LF solo). Ma cosa succede se il testo contiene sia? Questo accade molto; infatti, quando osservo il sorgente di questa pagina molto vedo entrambe le varietà.

Si dovrebbe prendere l'abitudine di cercare entrambi i tipi di separazione, così come il più vecchio Mac stile \r (solo CR). Ecco un modo per farlo:

\r?\n|\r

Il collegamento che nel codice di esempio si ottiene:

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

Questo è supponendo che si desidera far corrispondere esattamente una nuova riga o punto e virgola alla volta. Se si desidera far corrispondere una o più si può fare questo, invece:

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

Si noti, inoltre, come ho passato in una regex stringa al posto di un modello; tutte le espressioni regolari vengono automaticamente memorizzati nella cache, in modo da pre-compilare il regex non c'è niente di guadagno di prestazioni.

Guardando il commento del PO, sembra come se fosse una linea diversa finale (\ r \ n o CRLF), che era il problema.

Ecco la mia risposta, che avrebbe gestire più punti e virgola e le terminazioni di linea sia in formato (può o non può desiderare)

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

es. un file di input che assomiglia a questo:

1


2;3;;4
5

si tradurrebbe in 1,2,3,4,5

ho provato normale \ n e \\ n - entrambi lavorato nel mio caso, anche se sono d'accordo, se avete bisogno di un backslash normale si vorrebbe raddoppiare così com'è un carattere di escape. Si dà il caso che in questo caso, "\ n" diventa il carattere desiderato con o senza l'extra '\'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top