誰もが弦の分割方法を使用することが多いと思いますが、次の状況に遭遇しましたか。
誰もが次のコード実行結果とは何かを考えます
public static void main(String [] args){// todo auto-generatdメソッドStr1 = "a、b、c、a"; 、b、c ,, ""; string [] s1 = str1.split( "、"、 "); string [] s2 = str2.split("、 "); string [] s3 = str3.split(" "" ""、 "); str3長さ: "+"+ s3.length);}
実行結果:
この結果が表示されるのはなぜですか?
解決:
APIを表示することにより、一般的に使用されるスプリットメソッドがデフォルトで0で送信されることがわかりました。
public static void main(String [] args){// todo auto-generatdメソッドStr1 = "a、b、c、a"; 、b、c ,, ""; string [] str1.split( "、"); split( "、"、-1); "str3長さ:"+s3.length);}
APIを見つけた後、文字列クラスには2つのスプリットヘビーロードメソッドがあることがわかりました
1。public string [] split(string regex)
この文字列は、与えられた正規表現に従って分割されます。
このメソッドの役割は、特定の式を使用し、パラメーター0を制限するように、2つのパラメーター分割法を呼び出すようなものです。したがって、配列にはend -emptの文字列は含まれません。
たとえば、文字列「boo:and:foo」は次の結果を生成できます。
正規表現の結果
:{"boo"、 "and"、 "foo"} o {"b"、 "、":and:f "}
パラメーター:
regex-固定法の正規表現は戻ります:
この文字列を分割するために正規表現式の一致に応じて捨てられる文字列アレイ:
patternSyntaxexception-正規表現の文法が無効である場合
2。public string [] split(string regex、int limit)
この文字列は、マッチングによって与えられる正規表現に従って分割されます。
この方法で返される配列には、この文字列のサブストリングが含まれています。配列内のサブストリングは、この文字列に表示される順序で配置されます。式が入力の一部と一致しない場合、収入配列には1つの要素、つまりこの文字列のみがあります。
パラメーター制御モードアプリケーションを制限するため、配列の長さに影響します。この制限nが0を超える場合、モードはほとんどのn -onceを使用し、配列の長さはnより大きくなく、配列の最後のアイテムには最終的な一致境界を超えたすべての入力が含まれます。 nが非陽性の場合、モードは可能な限り使用され、配列は任意の長さである可能性があります。 nが0の場合、モードは可能な限り使用され、配列は任意の長さになり、終了文字列が破棄されます。
たとえば、文字列「boo:and:foo」は、これらのパラメーターで次の結果を生成できます。
regexlimit結果
: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)
パラメーター:
正規表現正規表現
上記のように、制限 - 表現しきい値
戻る:
文字列アレイは、正規表現式の一致に従って決定されます。
捨てる:
patternSyntaxexception-正規表現の文法が無効である場合