後で正規表現を使用する以外のjava.lang.Stringreplace()
とメソッドの違いは何ですか?replaceAll()
のような単純な置換の場合、に置き換えます.
が/
、違いはありますか?
13 に答える
ではjava.lang.String
、replace
メソッドはcharのペアまたは'のペアのいずれかを取りますCharSequence
(そのうちのStringはサブクラスであるため、Stringのペアを取ります)。このreplace
メソッドは、charまたは。のすべての出現箇所を置き換えますCharSequence
。一方、との最初の 引数String
は正規表現(regex)です。間違った機能を使用すると、微妙なバグが発生する可能性があります。replaceFirst
replaceAll
Q:とのjava.lang.String
メソッドの違いは何ですか。後者は正規表現を使用します。replace()
replaceAll()
A:正規表現のみです。どちらもすべてを置き換えます:)
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html
PS:
replaceFirst()
(正規表現を取る)もあります
このメソッドは、プリミティブと a の両方を引数としてreplace()
受け入れるようにオーバーロードされています。char
CharSequence
パフォーマンスに関する限り、後者は最初に正規表現パターンをコンパイルしてから最終的に置換する前に一致するため、replace()
メソッドは少し高速ですreplaceAll()
が、前者は提供された引数に単に一致して置換します。
正規表現パターン マッチングはもう少し複雑で、その結果遅くなることがわかっているため、可能な限り優先replace()
することをお勧めします。replaceAll()
たとえば、あなたが言及したような単純な置換の場合、次を使用することをお勧めします。
replace('.', '\\');
それ以外の:
replaceAll("\\.", "\\\\");
注: 上記の変換メソッドの引数はシステムに依存します。
- replace() と replaceAll() はどちらも 2 つの引数を受け入れ、文字列内の最初の部分文字列 (最初の引数) のすべての出現箇所を 2 番目の部分文字列 (2 番目の引数) に置き換えます。
- replace() は char または charsequence のペアを受け入れ、replaceAll() は正規表現のペアを受け入れます。
replace() が replaceAll() よりも高速に動作するというのは正しくありません。どちらも実装で同じコードを使用しているためです。
Pattern.compile(regex).matcher(this).replaceAll(replacement);
問題は、いつ replace を使用し、いつ replaceAll() を使用するかです。文字列内の出現場所に関係なく、部分文字列を別の部分文字列に置き換えたい場合は、replace() を使用します。ただし、文字列の先頭または末尾の部分文字列のみを置換するなどの特定の設定や条件がある場合は、replaceAll() を使用します。私の主張を証明するいくつかの例を次に示します。
String str = new String("==qwerty==").replaceAll("^==", "?"); \\str: "?qwerty=="
String str = new String("==qwerty==").replaceAll("==$", "?"); \\str: "==qwerty?"
String str = new String("===qwerty==").replaceAll("(=)+", "?"); \\str: "?qwerty?"
例を使用して、以下のコードで両方がどのように機能するかをさらに詳しく説明します。
public static void main(String[] args)
{
String s = "My\\s aaab\\s is\\s aaab\\s name";
String s1 = s.replace("\\s", "c");
System.out.println(s1);
String s2 = s.replaceAll("\\s", "c");
System.out.println(s2);
}
出力:
Myc aaabc isc aaabc name
My\scaaab\scis\scaaab\scname
説明
s.replace は、文字列「\\s」を c に置き換えます。したがって、最初の行の出力。s.replaceAll は、\\s を (スペースと同等の) 正規表現と見なし、スペースを c に置き換えます。文字列 s の \\s は、最初に遭遇した \ でエスケープされ、\s になります。
Intellij Idea は、使用状況も通知するほどスマートです。下の画像をよく見ると、置換と置換すべての使用法に対する Intellij の考え方による解釈の違いがわかります。
replace()
メソッドは正規表現パターンを使用しませんが、replaceAll()
メソッドは正規表現パターンを使用します。そのreplace()
ため、 よりも高速に実行されますreplaceAll()
。
replace は char データ型で機能しますが、replaceAll は String データ型で機能し、どちらも最初の引数のすべての出現箇所を 2 番目の引数に置き換えます。