Jak podzielić ciąg według spacji

329

Muszę podzielić mój ciąg na spacje. W tym celu próbowałem:

str = "Hello I'm your String";
String[] splited = str.split(" ");

Ale to nie działa.

safari
źródło
3
Wygląda dobrze ... jakie są wartości w tablicy „podzielonej”?
npinti
1
Twój kod rzeczywiście działa tak, jak jest. Zobacz kod uruchamiany na żywo w IdeOne.com .
Basil Bourque,
@BasilBourque - Nie mogłem znaleźć żadnego przycisku uruchamiania na tym łączu
nanosoft
1
@nanosoft Strona IdeOne.com uruchamia się automatycznie po załadowaniu. Zobacz wynik poniżej kodu, w sekcji stdout . Aby zmienić kod, kliknij forklink w lewym górnym rogu.
Basil Bourque,

Odpowiedzi:

639

To, co masz, powinno działać. Jeśli jednak podane miejsca domyślnie ... coś innego? Możesz użyć wyrażenia regularnego:

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Spowoduje to, że dowolna liczba kolejnych spacji podzieli ciąg znaków na tokeny.

Na marginesie, nie jestem pewien, czy słowo „split” jest słowem :) Wierzę, że stan bycia ofiarą split jest również „split”. To jedna z tych trudnych zagadnień gramatycznych :-) Nie próbuję być wybredny, po prostu pomyślałem, że przekażę to dalej!

corsiKa
źródło
45
Jestem Szwajcarem, czego się spodziewałeś, mój angielski nie jest najlepszy; P, w każdym razie dzięki!
safari
29
:-) Hej, to nie jest duże. Użyłem absurdalnych nazw zmiennych (w kodzie prawdopodobnie nie powinienem był pozwolić żyć!) Nie chciałem być nazistą w gramatyce ani nic takiego, tylko przekazywać trochę ciekawostek, to wszystko.
corsiKa
7
@Safari, właśnie dostałeś 2 świetne porady w cenie 1. tylko żartowałem. Świetna odpowiedź.
Nirmal Mangal,
8
„To, co masz, powinno działać”. Mówię coś podobnego dość często, gdy mój kod się psuje.
Griffin,
1
Uważam to za przydatne, ponieważ moim przypadkiem użycia było podzielenie łańcucha i usunięcie wielu spacji. Jedna linia kodu robi dla mnie obie te rzeczy.
Niharika Upadhyay
87

Chociaż zaakceptowana odpowiedź jest dobra, pamiętaj, że skończysz na wiodącym pustym ciągu, jeśli ciąg wejściowy zaczyna się od spacji. Na przykład z:

String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");

Wynik będzie:

splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";

Możesz więc przyciąć łańcuch przed podzieleniem go:

String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");
Gaspard
źródło
29

Wierzę, że umieszczenie wyrażenia regularnego w nawiasach str.split powinno rozwiązać problem. Metoda Java String.split () oparta jest na wyrażeniach regularnych, więc potrzebujesz:

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");
rbrtl
źródło
12

Użyj, Stringutils.split()aby podzielić ciąg według białych kroków. Na przykład StringUtils.split("Hello World")zwraca „Hello” i „World”;

Aby rozwiązać wspomniany przypadek, stosujemy taką metodę podziału

String split[]= StringUtils.split("Hello I'm your String");

kiedy wydrukujemy podzieloną tablicę, wynikiem będzie:

Witaj

Ja jestem

Twój

Strunowy

Aby zobaczyć pełną przykładową wersję demo, sprawdź tutaj

Sandeep Vanama
źródło
6

jeśli w jakiś sposób nie chcesz używać metody podziału ciągu, możesz użyć klasy StringTokenizer w Javie jako ...

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }
Muhammad Suleman
źródło
Istnieje możliwość zgłoszenia wyjątku ArrayIndexOutofBounds.
Ajay Takur,
2
Nie, to nie wyrzuci „ArrayIndexOutofBounds”, ponieważ zadeklarowałem rozmiar tablicy zgodnie z liczbą tokenów znalezionych w String. zapewni to, że rozmiar tablic nie będzie większy niż otrzymane tokeny w ciągu.
Muhammad Suleman,
6

Spróbuj tego

    String str = "This is String";
    String[] splited = str.split("\\s+");

    String split_one=splited[0];
    String split_second=splited[1];
    String split_three=splited[2];

   Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);
sachin pangare
źródło
4

Alternatywnym sposobem byłoby:

import java.util.regex.Pattern;

...

private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split

Widziałem to tutaj

gjain
źródło
3

OK, więc musimy podzielić, ponieważ już otrzymałeś odpowiedź, uogólniłem ją.

Jeśli chcesz podzielić dowolny ciąg znaków na spacje, ogranicznik (znaki specjalne).

Najpierw usuń wiodące miejsce, ponieważ powodują większość problemów.

str1 = "    Hello I'm your       String    ";
str2 = "    Are you serious about this question_  boy, aren't you?   ";

Najpierw usuń wiodące miejsce, które może być spacją, tabulatorem itp.

String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more

Teraz, jeśli chcesz podzielić według spacji lub dowolnego specjalnego znaku.

String[] sa = s.split("[^\\w]+");//split by any non word char

Ale ponieważ w zawiera [a-zA-Z_0-9], więc jeśli chcesz podzielić przez podkreślenie (_), użyj również

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space
Anuj Kumar Soni
źródło
To replaceAll("^\\s+","")uratowało mi dzień. To zadziałało w mojej sprawie. Dziękuję
Kostas Asargiotakis
2

Bardzo prosty przykład poniżej:

Mam nadzieję, że to pomoże.

String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String
BaxD
źródło
1

możesz saperate string używając poniższego kodu

   String thisString="Hello world";

   String[] parts = theString.split(" ");

   String first = parts[0];//"hello"

    String second = parts[1];//"World"
Syed Danish Haider
źródło
0

Oto metoda przycinania ciągu, który ma znak „,” lub biały znak

private String shorterName(String s){
        String[] sArr = s.split("\\,|\\s+");
        String output = sArr[0];

        return output;
    }
MrG
źródło
0

Ponieważ minęło trochę czasu, odkąd te odpowiedzi zostały opublikowane, oto kolejny bardziej aktualny sposób zrobienia tego, o co pytamy:

List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
    while (sc.hasNext()) output.add(sc.next());
}

Teraz masz listę ciągów znaków (która jest prawdopodobnie lepsza niż tablica); jeśli potrzebujesz tablicy, możesz to zrobićoutput.toArray(new String[0]);

daniu
źródło
0

Nie tylko biała przestrzeń, ale moje rozwiązanie rozwiązuje również niewidzialne postacie.

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");
logbasex
źródło
-1

Prosty w plucie ciąg według spacji

    String CurrentString = "First Second Last";
    String[] separated = CurrentString.split(" ");

    for (int i = 0; i < separated.length; i++) {

         if (i == 0) {
             Log.d("FName ** ", "" + separated[0].trim() + "\n ");
         } else if (i == 1) {
             Log.d("MName ** ", "" + separated[1].trim() + "\n ");
         } else if (i == 2) {
             Log.d("LName ** ", "" + separated[2].trim());
         }
     }
Jaydeep Dobariya
źródło