Das entfernen Bestimmter Zeichen in einem String, Java
Mein problem hier ist, dass ich möchte ein Zeichen zu entfernen, die in einigen teilen einer Zeichenfolge, aber ich weiß nicht, wie beschränken Sie das entfernen.
Beispiel:
A computer is a general purpose device that can be\n
programmed to carry out a finite set of\n
millions to billions of times more capable.\n
\n
In this era mechanical analog computers were used\n
for military applications.\n
1.1 Limited-function early computers\n
1.2 First general-purpose computers\n
1.3 Stored-program architecture\n
1.4 Semiconductors and\n
diesem Beispiel hier ist der Inhalt meiner string, was ich will, geschehen wird, um die zu entfernen \n
der Linien 1 und 2 oben, aber nicht zu entfernen \n
in Zeile 5 an. Wie Entferne ich die \n
ohne entfernen der anderen \n
?. Mein Ziel ist es hier, um die Zeichenfolge ein Absatz ohne \n
nach Linie. wie das Beispiel-die ersten 3 Zeilen ein Absatz und die nächsten Zeilen sind in Kugel-form(Beispiel). was ich sagen will ist, dass ich nicht wollen, zu entfernen \n
in Aufzählungen Zeichen.
Den wirklichen Inhalt der string ist dynamisch.
Habe ich versucht, mit String.replaceAll("\n", " ")
na klar, dass würde nicht funktionieren, es wird entfernen Sie alle \n
ich habe daran gedacht, mit Regex
zu bestimmen, was Alphanumberic aber es würde entfernen Sie einige Buchstaben nach \n
- Wenn es dynamisch, wie Sie wissen, zum entfernen von Linien 1 und 2 nur? Das Beispiel, das Sie gegeben haben, ist unklar. Sie sagen, entfernen von Linien 1 und 2, aber nicht von 5 an. Das zweite Kriterium ist überflüssig. Bitte fügen Sie weitere Details zu Ihrer Frage.
- Krank und die Inhalte Bearbeiten
- Wenn ich wiederholte Ihre Frage: "wie kann ich entfernen Sie alle neue-Zeile-Zeichen aus einer Zeichenkette, ausgenommen, wenn die neue Zeile eine leere Zeile oder die Zeile beginnt mit einer Ziffer" wäre das zutreffend sein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit dieser regex: -
Diese ersetzt Ihr
\n
wenn esnot preceded
durch einedot - termination of a paragraph
, und es istnot followed
durch einedigit
, wenn es ist, gefolgt von einer Aufzählung Punkt. (wie, Ihr\n
im ersten Punkt, gefolgt von einem1.2
. Also, es wird nicht ersetzt.).(.+)
am start, sorgt dafür, dass Sie nicht zu ersetzen, eineblank line
.Dieser Arbeit wird für die Zeichenfolge, die Sie gezeigt haben.
Erklärung: -
(.+)
-> Eine Aufnahme-Gruppe, Erfassung von etwas, die mindestens einmal.(?<!\\.)
-> die so genanntenegative-look-behind
. Es entspricht derstring
folgende, nur wenn die Zeichenfolge nicht vorangestelltdot(.)
imnegative-look-behind
Muster.Für z.B.: - brauchen Sie nicht zu ersetzen
\n
nach der Zeile: -millions to billions of times more capable.\n
.(?!\\d)
-> die so genanntenegative -look-ahead
. Es entspricht string dahinter, nur wenn die Zeichenfolge ist nicht gefolgt von einerdigit (\\d)
imnegative-look-ahead
Muster.Für z.B.: - In deiner Aufzählung Punkte,
computers\n
ist, gefolgt von1.2
. wo1
ist eine Ziffer. Also, wollen Sie nicht ersetzen, dass\n
.Nun
$1
und$2
stellen die Gruppen erfasst, die in das Muster passen. Da Sie nur ersetzen wollen"\n"
. So, nahmen wir die restlichen Muster übereinstimmen, wie es ist, beim Austausch von"\n"
mit einemspace
.So,
$1
ist die Darstellung für1st group
-(.+)
Hinweis,
look-ahead
undlook-behind
regexes sindnon-capturing
Gruppen.Für Weitere Details, Folgen Sie diesen links: -
http://docs.oracle.com/javase/tutorial/essential/regex/
http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
Ich vermute, dass Ihre Anforderung zum entfernen der \n der Linien 1 und 2 .
Was Sie tun können, ist wie folgt:
split den string in Segmente,
String[] array = yourString.split("\n");
concat jedem Segmente durch hinzufügen \n-tag, außer Linie 1, 2
array[1] + array[2] + array[3] + '\n' + array[4] + '\n' ...//und so
her