String split liefert keine leeren Ergebnisse

8

Ich versuche,

zu verwenden %Vor%

Problem ist, dass ich die leeren Ergebnisse einschließen möchte.

Es gibt zurück: [value1, value2, value3]
Es sollte sein: [value1, value2, , value3]

Kennt jemand die Regexp, um das zu beheben?

Ok, ich habe ein Problem gefunden. Ich lese gerade eine Textdatei und sie enthält diese Zeile:

%Vor%

Wenn ich diese Zeile lese, die die Textdatei liest, erzeugt sie das oben erwähnte fehlerhafte Ergebnis, das in solchen Fällen keine leeren Ergebnisse enthält: :::::.

Aber wenn ich die obige Zeile in einem Testprogramm verwende, kompiliert es nicht und ich bekomme eine "ungültige Escape-Sequenz". Ich denke es ist wegen der "\ & amp;".

Gibt es eine Problemumgehung für dieses Problem, indem Sie einen regulären Ausdruck verwenden?

    
Marquinio 21.09.2010, 21:36
quelle

9 Antworten

18

split nicht leer Spiele in der Folge enthalten, haben einen Blick auf die Dokumente hier . Jedoch standardmäßig nachlauf leere Zeichenkette (die am Ende des Arrays) werden verworfen. Wenn Sie diese ebenfalls hinzufügen möchten, versuchen Sie split(":", -1) .

    
casablanca 21.09.2010, 21:44
quelle
4

Funktioniert für mich.

%Vor%

gibt die Ausgabe

%Vor%     
crazyscot 21.09.2010 21:43
quelle
2

Ich denke, dass ein StringTokenizer für dich besser funktionieren könnte, YMMV.

    
mezmo 21.09.2010 21:43
quelle
1

Ich sehe das große Los nicht wirklich. StringTokenizer funktioniert genauso gut für die meisten Dinge wie diese und wird leicht die Token zurücksenden (damit Sie sagen können, dass es nichts dazwischen gab).

Ich wünschte nur, es hätte mit der erweiterten for-Schleife ein wenig besser funktioniert, aber abgesehen davon würde es nicht schaden, es zu versuchen.

Ich denke, es gibt einen Regexp-Trick, damit Ihre gepaarten Tokens zurückkommen, aber ich bin 20 Jahre gegangen, ohne Regexp zu lernen, und es war noch nie die beste Antwort auf jedes Problem, das ich angepackt habe wissen, da ich es nie benutze, aber die non-regexp Lösungen sind in der Regel zu leicht zu schlagen.)

    
Bill K 21.09.2010 21:41
quelle
1

Verwenden Sie ein negatives Limit in Ihrer Split-Anweisung:

%Vor%

Ergebnisse:

%Vor%     
Matthew Flynn 21.09.2010 21:45
quelle
1
%Vor%

druckt

%Vor%

Was genau Sie wollen. Dein Fehler ist woanders ...

    
f1sh 21.09.2010 21:45
quelle
1

Guava verwenden Splitter Klasse:

%Vor%

Splitter lässt keine leeren Ergebnisse standardmäßig aus, obwohl Sie eine machen können, die das tut. Obwohl es scheint von dem, was andere sagen, dass das, was Sie tun, sollte auch funktionieren.

    
ColinD 21.09.2010 21:58
quelle
0

Das sollte funktionieren, aber gib StringTokenizer weiter, wenn du immer noch Probleme hast.

    
AHungerArtist 21.09.2010 21:46
quelle
0

Das funktioniert,

%Vor%

Hier ist eine Testdatei,

%Vor%     
ChuckCottrill 04.10.2013 16:18
quelle

Tags und Links