質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

4回答

940閲覧

javaにてquoteメソッドで「\n」が文字列にならない

tanakasandayo

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/06/22 22:22

編集2023/06/22 22:45

0

0

実現したいこと

String a = "置換対象は大事";
String b = "置換対象";
String c =" あ\nい ";

a.replaceAll(b, c) ;

Sytem.out.println(a);

上記で実行した際に置換はされるのですが、
「あ\nいは大事」と表示したいです。

前提

変数cに対して
Pattern.quoteメソッドや
Matcher.quoteReplacementメソッドを用いて
実現をしようとしているのですが
改行され

いは大事
のように表示されてしまいます。
対応方法はほかにありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2023/06/22 23:22

\n は改行だからです。 \\n と書きましょう。
quickquip

2023/06/22 23:56 編集

うまくいかなかったコードが隠している理由がないように思います。 コード部分はコードブロックにいれて、せめてそのままコピー&ペーストしてください。(全角文字が入っています)
guest

回答4

0

「\n」意外にも正規表現をまとめてエスケープしたいのでこの方法では難しいです、、、

\nは正規表現の特殊文字では無いので、「正規表現のエスケープ」とは関係ありません。
正規表現の特殊文字*とか|とかであれば、Pattern.quoteでエスケープ(というかクォート)出来ます。

「正規表現とは何か」「文字列リテラルの中でのエスケプシーケンス(\nとか\tとか\\とか)とは何か」の理解が不十分なために、考えがおかしな方向に行ってます。
プログラミングを行う前に「文字列リテラルの中でのエスケプシーケンス(\nとか\tとか\\とか)とは何か」の理解は必須ですので、まずは基本の復習からですね。

他の方の回答と重なりますが、文字列リテラル中の\nは「(1文字の)改行」を表すので、\nからなる2文字の文字列を表現したいときには、\\nと書きます。これは文字列リテラルの書き方の話なので、正規表現とは別概念です。
\という文字を見た途端に頭の中でごっちゃになったのだと思いますが、\は様々な場所で様々な意味で使われるので、「ここでの\は何の意味か」を必ず考えましょう。様々な場所で様々な意味で使われるというのは\に限りませんが。

投稿2023/06/23 02:54

otn

総合スコア86398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1String c =" あ\nい "

Stringリテラルで書いてコンパイルを通した時点で、\nは改行文字として認識されるので、そのあとでquoteメソッドを通そうが無意味です。
そもそもreplaceAllの第2引数は「置換後の文字列」であって正規表現ではないため、quoteメソッドを通す意味がないように思います。quoteメソッドを使う目的としては、逆に「あ\nい」という文字列を置換したい場合に、そのままreplaceAllの第1引数として渡してしまうと「あ(改行文字)い」を置換対象にしてしまうので、それを避けるために使うことになるでしょう。

投稿2023/06/23 01:13

swordone

総合スコア20675

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「\n」意外にも正規表現をまとめてエスケープしたいのでこの方法では難しいです、、、

これは意味が分からないので措いておきます。


https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#replaceAll-java.lang.String-java.lang.String-

Matcher.replaceAllを参照してください。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Matcher.html#replaceAll-java.lang.String-

置換文字列内でバックスラッシュ()とドル記号($)を使用すると、それをリテラル置換文字列として処理した場合とは結果が異なる場合があります。ドル記号は、先に説明したとおり、前方参照された部分シーケンスへの参照として処理される場合があり、バックスラッシュは置換文字列内のリテラル文字をエスケープするのに使用されます。

diff

1 String a = "置換対象は大事"; 2 String b = "置換対象"; 3- String c =" あ\nい "; 4+ String c =" あ\\\\nい "; 5 6- a.replaceAll(b, c) ; 7+ String result = a.replaceAll(b, c) ; 8 9- Sytem.out.println(a); 10+ System.out.println(result);
あ\nい は大事

投稿2023/06/22 23:59

shiketa

総合スコア4151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この回答はGPT-4による自動生成回答です

以下の方法で実現できます。

java

1public class Main { 2 public static void main(String[] args) { 3 String a = " あ\nい "; 4 String result = a.replace("\n", "\\n"); 5 System.out.println(result); 6 } 7}

このコードでは、replaceメソッドを使って\n\\nに置き換えています。これにより、出力時に「あ\nい」と表示されます。

投稿2023/06/22 22:23

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanakasandayo

2023/06/22 23:05

「\n」意外にも正規表現をまとめて エスケープしたいのでこの方法では難しいです、、、
int32_t

2023/06/22 23:57

\n は正規表現とは関係ありません。具体的にどんなものをエスケープしたいのか、詳細を質問文に書きましょう。
quickquip

2023/06/23 01:56 編集

質問に書かれてない条件があるのでしたら、自動回答のコメント欄に書くのではなく質問を編集したほうがいいですよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問