Java は、replaceAll() メソッドと Split() メソッドを使用して、\r\n 文字列の折り返しで発生した問題に対処します。

目次

(1) 問題の内容

(2) 解決策


(1) 問題の内容

今週の仕事で、要件を満たしました。一般的な要件機能は次のとおりです: 構成テーブルでコネクタを維持します。ここでは [\r\n] 改行文字で構成されています。フロント エンドがデータ表示を取得するときに、構成テーブルを使用します 【 \r\n]改行を結合して表示します。簡単な要件のようです。終了後、結合した文字列をフロントエンドに戻します。奇妙なことが起こりました。フロントエンドでは新しい文字列が表示されません行ですが、[ \r\n]内容がそのまま表示されます。

そこで、コードのデバッグを開始し、コードを長時間観察したところ、結合後の文字列の [\r\n] が改行文字ではなく、通常の文字であることがわかりました。 ]を改行文字[\r\n]に置換し、置換処理にはreplaceAll()メソッドを使用します。

String str = "[1111111\r\n22222]";
// 替换普通的字符 \r\n 为换行符 \r\n
str = str.replaceAll("\r\n", "\r\n");

しばらく操作してみると、効果がなくなったことがありますか?? ? ? 通常の \r\n が改行文字に置き換えられませんでした。理由がわかりたくありませんでした。Baidu で検索したところ、ようやく理由がわかりました。解決方法は次のとおりです。

(2) 解決策

上記のコードでは、replaceAll() メソッドを使用して [\r\n] を置き換えています。これは、replaceAll() メソッドが解析に正規表現を使用しており、[\] バックスラッシュが存在する場合は正規表現に転送する必要があるためです。が転送ではない場合、[\] バックスラッシュがエスケープ文字として使用されます。通常の [\] バックスラッシュを表すには、2 つのバックスラッシュを使用してこのように [\\] を表現する必要があります。最初のバックスラッシュは、スラッシュです。 2 番目のバックスラッシュをエスケープします。

さらに問題があり、[\] は転送されていますが、[\] と [r] の組み合わせは正規表現の改行文字であるため、[\r] をエスケープして変更する必要があります。通常の文字の場合は、次のように記述します: [\\\\r]、4 つのバックスラッシュと小文字の [r] は、通常の [\r] 文字を意味します。

String str = "[1111111\r\n22222]";
// 替换普通的字符 \r\n 为换行符 \r\n
// TODO 注意:这里一定要使用四个斜杠
str = str.replaceAll("\\\\r\\\\\n", "\r\n");

これまでのところ、replaceAll() メソッドでの [\r\n] 改行文字の処理の問題は解決されました。

おすすめ

転載: blog.csdn.net/qq_39826207/article/details/131076153