ユーザーからの入力を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
_"です。
何が悪いのか提案してください。
_\n
_は改行文字です。実際のバックスラッシュ文字の後にn
を付ける必要がある場合は、これを使用する必要があります。
_String test ="s1\ns2\ns3\ns4";
System.out.println(test.replaceAll("\\n",","));
_
更新:
_\n
_文字の代わりにSystem.lineSeparator();
を使用できます。
_System.out.println(test.replaceAll(System.lineSeparator(),","));
_
アナクロンが既に指摘したように、「\ n」は特別な文字であり、ユーザー入力が「\\ n」に変換されるため、ユーザー入力「\ n」とは異なります。
Javaユーザー入力後の文字列は次のようになります
String test ="s1\\ns2\\ns3\\ns4";
あなたのテスト文字列は好きではありません
String test ="s1\ns2\ns3\ns4";
ユーザーは単一の文字を入力し、キーボード「\」はJava文字「\\」に変換されます。
Java.util.regex.Pattern documentation は、行末記号を次のように指定します。
行末記号は、入力文字シーケンスの行の終わりを示す1文字または2文字のシーケンスです。以下は、行末記号として認識されます。
改行(ラインフィード)文字( '\ n')、改行文字の直後に改行文字( "\ r\n")、スタンドアロンの改行文字( '\ r')、次の文字行文字( '\ u0085')、行区切り文字( '\ u2028')、または段落区切り文字( '\ u2029)。
Textareaの行末記号は\ r\n(CR/LF)です。
そのための正規表現は[\r\n]+
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