podziel ciąg tylko w pierwszej instancji - java

145

Chcę podzielić ciąg znaków za pomocą znaku „=”. Ale chcę, żeby to podzieliło się tylko w pierwszej instancji. Jak mogę to zrobić ? Oto przykład JavaScript dla znaku '_', ale nie działa on dla mnie podzielony łańcuch tylko na pierwsze wystąpienie określonego znaku

Przykład:

apple=fruit table price=5

Kiedy próbuję String.split ('='); to daje

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

Ale ja potrzebuję

[apple],[fruit table price=5]

Dzięki

dracula
źródło
Nie musisz uciekać =.
Rohit Jain

Odpowiedzi:

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

Jak String.split(java.lang.String regex, int limit)wyjaśnia:

Tablica zwrócona przez tę metodę zawiera każdy podciąg tego ciągu, który jest zakończony innym podciągiem, który pasuje do danego wyrażenia lub jest zakończony końcem ciągu. Podciągi w tablicy są w kolejności, w jakiej występują w tym ciągu. Jeśli wyrażenie nie pasuje do żadnej części danych wejściowych, wynikowa tablica ma tylko jeden element, a mianowicie ten ciąg.

limitParametr określa liczbę wzór jest stosowany i tym samym wpływa na długość otrzymanego tablicy. Jeśli limit n jest większy niż zero, wzór zostanie zastosowany najwyżej n - 1 razy, długość tablicy nie będzie większa niż n , a ostatni wpis tablicy będzie zawierał wszystkie dane wejściowe poza ostatnim dopasowanym ogranicznikiem.

Na boo:and:fooprzykład ciąg daje następujące wyniki z tymi parametrami:

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" }
Zaheer Ahmed
źródło
1
To mylące, ale to po prostu działa! Dzięki!
Clint Eastwood
4
Pewne wyjaśnienie: Limit 2 zwróci listę CO NAJMNIEJ 2 elementów. Może zwrócić listę zawierającą 1 element, jeśli nie ma dopasowania do wyrażenia. Jeśli do wyrażenia pasują 2, drugi element zwróconej tablicy nie zostanie podzielony.
modle13
11

Tak, możesz, po prostu przekaż parametr liczby całkowitej do metody podziału

String stSplit = "apple=fruit table price=5"

stSplit.split("=", 2);

Oto referencja do dokumentacji java: String # split (java.lang.String, int)

codeMan
źródło
5

Jak wiele innych odpowiedzi sugeruje podejście limitujące, może to być inny sposób

Możesz użyć metody indexOf na String, która zwróci pierwsze wystąpienie danego znaku, Używając tego indeksu możesz uzyskać żądane wyjście

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));
Siva
źródło
2
To nie rozdziela, ale wydobywa drugą część. Wykonanie pierwszej części wymagałoby kolejnej linii kodu ... 4 wiersze kontra 1 = kciuk w dół
Clint Eastwood
0

Wypróbuj ten kod ...

To działa.

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]);
    }
}
Bhola
źródło
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

Domyślnie metoda split tworzy n liczb tablic na podstawie podanego wyrażenia regularnego. Ale jeśli chcesz ograniczyć liczbę tablic do utworzenia po podziale, przekaż drugi argument jako argument w postaci liczby całkowitej.

Kailash Karki
źródło
3
Jaki był problem? Dołącz więcej szczegółów, aby Twoja odpowiedź była zrozumiała!
Paresh Mayani
-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_!

lubię pisać własne metody :)

Martin Košťál
źródło
3
Ta metoda nie jest zbyt przydatna, ponieważ separator jest zakodowany na stałe. Ponadto implementacja wyszukiwania liniowego z pętlą for nie zapewnia żadnej przewagi nad użyciem String.indexOf do znalezienia położenia pierwszego separatora. Po trzecie, nie jest intuicyjne sprawdzanie, ile elementów String jest zwracanych. Mówiąc o dzieleniu rzeczy na dwie części, rozważ użycie typu danych Pair <String, String>, który reprezentuje dokładnie dwa ciągi zamiast tworzenia tablicy.
Gee Bee