2017-03-03 1 views
4

I-Eingang nehmen vom Benutzer als String soll, und ersetzen das Zeilenende-Zeichen \n mit ,Ersetzen ' n' von '', in Java

I versucht:

String test ="s1\ns2\ns3\ns4"; System.out.println(test.replaceAll("\n",","));

Output war s1, s2, s3, s4

Aber wenn ich den gleichen Code versuche, indem ich Eingang von UI erhalte, ist es funktioniert nicht.

Wenn ich die Zeichenfolge Test debuggen (was ich fest einprogrammiert) wird behandelt, als,

s1

s2

s3

s4

aber die Zeichenfolge von UI ist "s1\ns2\ns3\ns4".

Bitte schlagen Sie vor, was falsch ist.

+0

versuchen 'System.out.println (test.replaceAll ("\ n", ","). replaceAll ("\ r \ n", ",")); ' –

+1

_" Eingabe von UI erhalten "_ - Zeigt den Code an, der die Eingabe von der Benutzeroberfläche erhält. Offensichtlich interpretiert das Lesen den Escape-Code nicht und lässt das Literal '\ n' in der Zeichenfolge. Möglicherweise müssen Sie die Escape-Sequenzen selbst interpretieren –

Antwort

6

\n ist das neue Zeilenzeichen. Wenn Sie ersetzen müssen, dass die tatsächlichen umgekehrten Schrägstrich von n gefolgt, dann müssen Sie diese verwenden:

String test ="s1\ns2\ns3\ns4"; 
System.out.println(test.replaceAll("\\n",",")); 

Update:

können Sie die System.lineSeparator(); anstelle des \n Zeichen.

System.out.println(test.replaceAll(System.lineSeparator(),",")); 
+0

Das funktioniert gut, wenn ich die Zeichenfolge als hardcoded gebe. aber wenn ich die Zeichenfolge von Benutzer durch Textarea bekomme es funktioniert –

+0

Bitte überprüfen Sie den Wert dieser Zeichenfolge, wenn Sie von Benutzer über TextArea erhalten. –

+0

Verwenden Sie nicht \ n, sondern den Zeilentrenner wie in http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html definiert. – Aubin

1

Wie Anacron bereits darauf hingewiesen ‚\ n‘ ist ein spezieller und unterschiedlichen charachter auf die Benutzereingabe „\ n“, da die Benutzereingabe auf „\\ n“ umgewandelt wird.

Die Java-String nach Eingabe Benutzer wie

aussehen
String test ="s1\\ns2\\ns3\\ns4"; 

und nicht wie Ihr Test-String

String test ="s1\ns2\ns3\ns4"; 

Der Benutzer wird Input-Single charachter und die Tastatur '\' zu Java charachter transformiert "\\".

2

java.util.regex.Pattern documentation spezifiziert Linie Terminator als:

Ein Leitungsabschluss ist eine ein- oder zwei-Zeichen-Sequenz, die das Ende einer Zeile der Eingabezeichenfolge markiert.Die folgenden sind als Leitungsabschlüsse erkannt:

Ein Neue-Zeile (Zeilenvorschub) Zeichen ('\ n'), Ein Wagenrücklaufzeichen, unmittelbar gefolgt von einem Zeilenende-Zeichen ("\ r \ n"), A autonomes Wagenrücklaufzeichen ('\ r'), Ein Zeichen der nächsten Zeile ('\ u0085'), Ein Trennzeichen ('\ u2028') oder Ein Trennzeichen ('\ u2029) .

Ihr Abschlusswiderstand, aus Textarea, sind \ r \ n (CR/LF).

regex für das heißt [\r\n]+

1

Mit Regex:

public class Program 
{ 
    public static void main(String[] args) { 
     String str = "s1\ns2\ns3\ns4"; 
     str = str.replaceAll("(\r\n|\n)", ","); 
     System.out.println(str); 
    } 
} 

outout: s1, s2, s3, s4