私はこのような文字列を持っています
"hello
Java
book"
String(hello\r\njava\r\nbook)から\ rおよび\ nを削除します。 「hellojavabook」という文字列が必要です。これどうやってするの?
ReplaceAllを使用した正規表現。
public class Main
{
public static void main(final String[] argv)
{
String str;
str = "hello\r\njava\r\nbook";
str = str.replaceAll("(\\r|\\n)", "");
System.out.println(str);
}
}
ペアである場合にのみ\ r\nを削除する場合(上記のコードは\ rまたは\ nを削除します)、代わりにこれを実行します。
str = str.replaceAll("\\r\\n", "");
正規表現を避けたい場合、または以前のJVMをターゲットにする必要がある場合、String.replace()は以下を行います。
str=str.replace("\r","").replace("\n","");
また、CRLFペアを削除するには:
str=str.replace("\r\n","");
後者は、同じことを行うために正規表現を構築するよりも効率的です。しかし、文字列は一度しか解析されないため、前者は正規表現としてより高速になると思います。
public static void main(final String[] argv)
{
String str;
str = "hello\r\n\tjava\r\nbook";
str = str.replaceAll("(\\r|\\n|\\t)", "");
System.out.println(str);
}
正規表現にも表を追加すると便利です。
文字列strが与えられた場合:
str = str.replaceAll("\\\\r","")
str = str.replaceAll("\\\\n","")
replaceAll メソッドを使用して、発生した\ nまたは\ rを空の文字列に置き換えましたか?
以下のようにorg.Apache.commons.text.StringEscapeUtils
からunescapeJava
を使用できます
str = "hello\r\njava\r\nbook";
StringEscapeUtils.unescapeJava(str);
static byte[] discardWhitespace(byte[] data) {
byte groomedData[] = new byte[data.length];
int bytesCopied = 0;
for (int i = 0; i < data.length; i++) {
switch (data[i]) {
case (byte) '\n' :
case (byte) '\r' :
break;
default:
groomedData[bytesCopied++] = data[i];
}
}
byte packedData[] = new byte[bytesCopied];
System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);
return packedData;
}
Commons-codecプロジェクトで見つかったコード。
行ターミネータを直接渡すことができます。\n、Windows、Mac、またはUNIXで行末記号がわかっている場合。または、次のコードを使用して、3つの主要なオペレーティングシステムのいずれかの改行を置き換えることができます。
str = str.replaceAll("\\r\\n|\\r|\\n", " ");
上記のコード行は、Mac、Windows、およびLinuxで改行をスペースに置き換えます。また、行区切り文字を使用できます。すべてのOSで機能します。以下は、行区切りのコードスニペットです。
String lineSeparator=System.lineSeparator();
String newString=yourString.replace(lineSeparator, "");