web-dev-qa-db-ja.com

javaの '\ n'を '、'に置き換えます

ユーザーからの入力をStringとして受け取り、改行文字_\n_を_,_に置き換えたい

私は試した :

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

出力はs1、s2、s3、s4でした

しかし、UIから入力を取得して同じコードを試しても、機能しません。

私がそれをデバッグするとき、文字列テスト(私がハードコードしたもの)は次のように扱われます、

s1

s2

s3

s4

しかし、UIからの文字列は "_s1\ns2\ns3\ns4_"です。

何が悪いのか提案してください。

5
Ramya Selvarani

_\n_は改行文字です。実際のバックスラッシュ文字の後にnを付ける必要がある場合は、これを使用する必要があります。

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

更新:

_\n_文字の代わりにSystem.lineSeparator();を使用できます。

_System.out.println(test.replaceAll(System.lineSeparator(),","));
_
12
anacron

アナクロンが既に指摘したように、「\ n」は特別な文字であり、ユーザー入力が「\\ n」に変換されるため、ユーザー入力「\ n」とは異なります。

Javaユーザー入力後の文字列は次のようになります

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

あなたのテスト文字列は好きではありません

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

ユーザーは単一の文字を入力し、キーボード「\」はJava文字「\\」に変換されます。

2
Markus Lausberg

Java.util.regex.Pattern documentation は、行末記号を次のように指定します。

行末記号は、入力文字シーケンスの行の終わりを示す1文字または2文字のシーケンスです。以下は、行末記号として認識されます。

改行(ラインフィード)文字( '\ n')、改行文字の直後に改行文字( "\ r\n")、スタンドアロンの改行文字( '\ r')、次の文字行文字( '\ u0085')、行区切り文字( '\ u2028')、または段落区切り文字( '\ u2029)。

Textareaの行末記号は\ r\n(CR/LF)です。

そのための正規表現は[\r\n]+

2
Aubin

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

1
Mehraj Malik