最初のインスタンスでのみ文字列を分割する-Java


145

文字列を「=」文字で分割したい。しかし、私はそれを最初のインスタンスでのみ分割したいです。どうやってやるの ?これは「_」文字のJavaScriptの例ですが、指定した文字の最初のインスタンスでのみ文字列を分割する場合は機能しません

例:

apple=fruit table price=5

String.split( '=');を試すと それは与えます

[apple],[fruit table price],[5]

しかし、私は必要です

[apple],[fruit table price=5]

ありがとう


脱出する必要はありません=
Rohit Jain 2013

回答:


282
string.split("=", 2);

以下のようにString.split(java.lang.String regex, int limit)説明しています。

このメソッドによって返される配列には、この文字列の各部分文字列が含まれ、指定された式に一致する別の部分文字列で終了するか、文字列の末尾で終了します。配列内の部分文字列は、この文字列に出現する順序です。式が入力のどの部分にも一致しない場合、結果の配列には1つの要素、つまりこの文字列のみが含まれます。

limitパラメータは、パターンが適用される回数を制御し、従って、得られた配列の長さに影響を与えます。制限nがゼロより大きい場合、パターンは最大n -1回適用され、配列の長さはn以下であり、配列の最後のエントリには、最後に一致した区切り文字を超えるすべての入力が含まれます。

boo:and:fooたとえば、文字列は、これらのパラメーターを使用して次の結果を生成します。

Regex Limit    Result
:     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" }

1
理解するのは難しいですが、うまくいきます!ありがとう!
クリントイーストウッド

4
いくつかの明確化:Limit 2はAT MOST 2要素のリストを返します。式に一致しない場合は、1つの要素のリストを返すことがあります。式に2つの一致がある場合、返される配列の2番目の要素は分割されません。
modle13 2018年


5

他の多くの回答が制限アプローチを示唆しているように、これは別の方法になる可能性があります

指定された文字の最初の出現を返すStringでindexOfメソッドを使用できます。そのインデックスを使用して、目的の出力を取得できます。

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));

2
これは分割されませんが、2番目の部分が抽出されます。最初の部分をとるには、さらに別のコード行が必要です... 4行vs. 1 =イマイチ
クリントイーストウッド

0

このコードを試してください...

その働き。

public class Split
{
    public static void main(String...args)
    {
        String a = "%abcdef&Ghijk%xyz";
        String b[] = a.split("%", 2);

        System.out.println("Value = "+b[1]);
    }
}

0
String string = "This is test string on web";
String splitData[] = string.split("\\s", 2);

Result ::
splitData[0] =>  This
splitData[1] =>  is test string  


String string = "This is test string on web";
String splitData[] = string.split("\\s", 3);

Result ::
splitData[0] =>  This
splitData[1] =>  is
splitData[1] =>  test string on web

デフォルトでは、splitメソッドは、指定された正規表現に基づいてn個の配列を作成します。ただし、分割後に作成する配列の数を制限する場合は、2番目の引数を整数引数として渡します。


3
なにが問題だったの?あなたの答えが自明になるように詳細を含めてください!
Paresh Mayani、2015年

-2
String[] func(String apple){
String[] tmp = new String[2];
for(int i=0;i<apple.length;i++){
   if(apple.charAt(i)=='='){
      tmp[0]=apple.substring(0,i);
      tmp[1]=apple.substring(i+1,apple.length);
      break;
   }
}
return tmp;
}
//returns string_ARRAY_!

私は自分のメソッドを書くのが好きです:)


3
セパレータはハードコードされているため、この方法はあまり役に立ちません。さらに、forループを使用した線形検索の実装は、最初のセパレーターの位置を見つけるためにString.indexOfを使用することに勝る利点はありません。3番目に、返されるString要素の数を確認することは直感的ではありません。物事を2つに分割することについて説明するとき、配列を作成する代わりに、正確に2つの文字列を表すPair <String、String>データ型を使用することを検討してください。
Gee Bee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.