皆さんもStringのsplitメソッドをよく使うと思いますが、次のような状況に遭遇したことはありませんか:
次のコードの実行結果を考えてください
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(","); String[] s3 = str3.split(","); System.out.println("str1长度:"+s1.length); System.out.println("str2长度:"+s2.length); System.out.println("str3长度:"+s3.length); }
実行結果:
なぜそうなったのですか?結果が発生した場合、API を検索して解決策を見つけました
解決策:
API を確認すると、一般的に使用される分割メソッドがデフォルトで 0 を渡すことがわかりました。空の str2 出力の問題を解決する解決策は、渡すことです。 2 番目のパラメータは負の数、つまり
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(",",-1); String[] s3 = str3.split(",",-1); System.out.println("str1长度:"+s1.length); System.out.println("str2长度:"+s2.length); System.out.println("str3长度:"+s3.length); }
String クラスに 2 つの分割オーバーロード メソッドがあることが判明しました
1.public String[] Split(String regex)
この文字列に分割された指定された正規表現の一致に従って分割されます。
このメソッドは、指定された式と制限引数 0 を使用して 2 つの引数の分割メソッドを呼び出すのと同じように機能します。したがって、終端の空文字列は結果の配列には含まれません。
たとえば、これらの式を使用した文字列「boo:and:foo」は次の結果を生成します:
Regex result
: { "boo", "and", "foo" } o { "b", "", ":and:f" }
Parameters:
regex - 区切り正規表現
returns:
決定された文字列の配列指定された正規表現の一致に基づいてこの文字列を分割することによって
スロー:
PatternSyntaxException - 正規表現の構文が無効な場合
2.public String[] split(String regex,int limit)
Split に基づくこの文字列は指定された正規表現と一致します。
このメソッドによって返される配列には、この文字列の部分文字列が含まれており、各部分文字列は指定された式に一致する別の部分文字列で終了するか、この文字列の終わりで終了します。配列内の部分文字列は、この文字列内に出現する順序で配置されます。式が入力のどの部分にも一致しない場合、結果の配列には文字列という 1 つの要素のみが含まれます。
limit パラメーターはパターンが適用される回数を制御するため、結果の配列の長さに影響します。制限 n が 0 より大きい場合、パターンは最大で n - 1 回適用され、配列の長さは n を超えず、配列の最後の項目には、最後に一致した区切り文字を超えるすべての入力が含まれます。 。 n が正でない場合、パターンは可能な限り何度でも適用され、配列の長さは任意です。 n が 0 の場合、パターンは可能な限り何度でも適用され、配列の長さは任意であり、終端の空の文字列は破棄されます。
たとえば、これらのパラメータを使用した文字列「boo:and:foo」は次の結果を生成します:
正規表現制限の結果
: 2 { "boo", "and:foo" } : 5 { "boo", "and", "foo" } : -2 { "boo", "and", "foo" } o 5 { "b", "", ":and:f", "", "" } o -2 { "b", "", ":and:f", "", "" } o 0 { "b", "", ":and:f" }
このメソッドを呼び出す str.split(regex, n) 形式は、次とまったく同じ結果を生成します。次の式 同じ:
Pattern.compile(regex).split(str, n)
パラメータ:
regex - 区切り正規表現
limit - 結果のしきい値、上記と同様
戻り値:
string 配列、これは、指定された正規表現の一致に基づいてこの文字列を分割することによって決定されます
Throws:
PatternSyntaxException - 正規表現の構文が無効な場合
Java の分割メソッドの詳細な説明と関連記事については、注目してください。 PHP 中国語 Web サイトへ!