2

私はちょうどいくつかの回避策を行い、結果に驚いた. 説明させてください。

String str = "aaa.jpg";
String[] str1 = str.split(".");  //output of this is empty array with size 0
str.contains("."); //output of this is true.

なぜsplit()メソッドが を認識できないのか"."、どこでをcontains()認識できるのか、誰でも説明できますか"."

4

3 に答える 3

10

split()正規表現で動作し、.正規表現では任意の文字 (改行文字を除く) を意味します。さらに、結果の配列が空である理由は、 がsplit()後続の空の文字列を破棄するためです (ただし、負の 2 番目の引数を指定することで、空の文字列を保持できます)。

splitこのメソッドは、指定された式とゼロの制限引数を使用して 2 つの引数のメソッドを呼び出すかのように機能します。したがって、後続の空の文字列は、結果の配列には含まれません。

.リテラルのピリオドに一致させるために をエスケープすることが可能です:

str.split("\\.")

対照的に、contains()リテラル文字列で機能するため、 a.は単なる a ..

于 2013-08-30T18:57:06.103 に答える
2

String#split()の Javadoc 。String#contains()の Javadoc 。1 つは正規表現を使用し、もう 1 つは使用しません。

正規表現の.文字は任意の文字を意味します。ここで正規表現の Java ルールを確認できます。文字のリテラル エスケープは、文字の\x場所xです。\Java String リテラルを使用しているため、もエスケープする必要があります。

"yourString".split("\\.");

またはPattern.quote(String)メソッドを使用します。

contains()として実装されています

public boolean contains(CharSequence s) {
    return indexOf(s.toString()) > -1;
}

whereindexOfは、指定された が最初に出現する場所を検索します。CharSequenceこの場合は 1 文字'.'です。

于 2013-08-30T18:56:07.807 に答える