10
votes

Question Java Scanner

Comment définissez-vous le délimiteur pour un scanner vers l'un ou l'autre? ou nouvelle ligne?

J'ai essayé: scanner.usedelimiter (modèle.ca ("(\ n) |;")); Mais ça ne marche pas.


1 commentaires

Trouvé le bogue, je dois utiliser (\ r \ n) |; J'étais analytique quelque chose comme ceci: String; Nombre \ R \ N ... et cela n'a pas pris quelque chose comme 100 \ r en tant que nombre.


3 Réponses :


16
votes

En règle générale, dans les motifs, vous devez doubler le \ .

donc, essayez xxx

ou xxx

modifier : si \ r \ n est le problème, vous voudrez peut-être essayer ceci. : xxx

correspondant à un ou plusieurs des \ r , \ n et ; .

note : je n'ai pas essayé ceci.


2 commentaires

Vous pouvez aller de toute façon. Si vous utilisez deux backslashes, le compilateur REGEX voit \ n et l'interprète en tant que séquence d'échappement pour une surface linefeed. Si vous utilisez une barre oblique inverse, le compilateur REGEX voit un personnage de lignage réel, qu'il correspond littéralement. Mais je vais certainement aller avec la version de la classe de caractères: "[\\ n;]" ou "[\ n;]" ; Il est plus facile de lire aussi bien que plus efficace.


@Alan Moore: Ah, d'accord ... Je viens de supposer qu'une pause littérale de ligne serait mal interprétée.



1
votes

Regarder le commentaire de l'OP, on dirait que c'était une ligne différente (\ r \ n ou crlf) qui était le problème.

Voici ma réponse, qui gérerait plusieurs points-virgules et des fins de ligne dans les deux formats ( peut ou peut ne pas être souhaité) xxx

xxx

entraînerait 1,2,3,4,5

J'ai essayé normal \ n et \\ N - Tous deux travaillés dans mon cas, bien que je suis d'accord si vous avez besoin d'une barre oblique inverse que vous voudriez doubler, car c'est un caractère d'échappement. Il arrive tellement que dans ce cas, "\ n" devient le caractère désiré avec ou sans l'extra '\'


0 commentaires

9
votes

Comme vous l'avez découvert, vous devez rechercher des séparateurs de ligne \ r \ n code> (CRLF) au lieu du style UNIX \ n code> (lf seul). Mais que si le texte contient les deux? Cela arrive beaucoup; En fait, lorsque j'appuie la source de cette page même, je vois les deux variétés.

Vous devez avoir l'habitude de rechercher les deux types de séparateur, ainsi que le plus ancien style MAC \ r code> (Cr seulement). Voici une façon de le faire: p> xxx pré>

brancher dans votre code d'échantillon que vous obtenez: p> xxx pré>

ceci vous suppose Voulez-vous correspondre exactement à une nouvelle ligne ou à un point-virgule à la fois. Si vous voulez correspondre à un ou plus em> vous pouvez le faire à la place: p>

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


0 commentaires