0


0

/ u000Aに置き換えたくありません。 "asdxyz / u000A"のように見せたくありません。

実際の改行文字に置き換えたいのですが。

3 Answer


6


newtext = text.replace("\\n", "\n");


6


Natso’s answerに対するあなたの回答によると、何が起こっているのかという根本的な誤解があります。 2文字のシーケンス `\ n`は改行文字ではありません。 しかし、実際の文字は見づらいため、コード内でその文字を表現する方法です。 コンパイラは、文字列リテラルのコンテキストでその2文字のシーケンスに遭遇したときに、それらをASCIIの値10を持つ実際の改行文字として解釈する必要があることを認識しています。

その2文字のシーケンスをコンソールに表示しても、表示されません。 代わりに、カーソルが次の行に進むのがわかります。 これは、コンパイラがすでにこれらの2文字を改行文字に置き換えているためです。したがって、コンソールに送信されるのは実際には改行文字です。

バックスラッシュと小文字の_Nを含むプログラムへの_入力_があり、それらを改行文字に変換したい場合は、https://stackoverflow.com/questions/535227/take-string-asdxyz-n-and-replaceを使用してください。 -n-with-the-ascii-value / 535239#535239 [ザックの答え]で十分かもしれません。 しかし、あなたのプログラムが入力の中で本当のバックスラッシュを許すことを望むなら、バックスラッシュとそれに続く小文字の_N_が実際にそれらの2つの文字であることを示すために何らかの方法が必要です。 これを行う通常の方法は、バックスラッシュの前に別のバックスラッシュを追加することです。 そのような状況でZachのコードを使用すると、3文字のシーケンス `\\ n`をバックスラッシュとそれに続く改行文字からなる2文字のシーケンスに変換することになります。

バックスラッシュエスケープを使用する文字列を確実に読み取る方法は、入力の先頭から始めて、一度に1文字ずつ構文解析することです。 バックスラッシュが発生した場合を除き、入力から出力に文字をコピーします。 その場合は、次の文字も確認してください。 それが別のバックスラッシュであるならば、単一のバックスラッシュを出力にコピーしてください。 小文字の_N_の場合は、改行文字を出力に書き込みます。 それ以外の文字なら、あなたが定義したものは何でも正しいものです。 (例としては、入力全体を誤ったものとして拒否したり、バックスラッシュがなかったように見せたり、バックスラッシュと次の文字の両方を省略したりすることが挙げられます。)

デバッガの中で変数の内容を観察しようとしているのなら、デバッガが改行文字を検出してそれを_back_から2文字のシーケンス `\ n`に変換する可能性があります。 そのため、コードの内容を理解しようとしてコードをステップ実行している場合は、デバッガの有用性が損なわれる可能性があります。 そしてほとんどの場合、それは本当に役に立ちます。 プログラマは通常、文字列に含まれる文字を正確に知りたがっています。彼らは、それらの文字が画面上にどのように表示されるかについてそれほど心配していません。


0


真のASCII値を生成するには、 "(char)(10)"コードを使用します。

newstr = oldstr.replaceAll( "\\ n"、(char)(10));

// -or-

newstr = oldstr.replaceAll( "\\ n"、 ""((char)(10)));