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.


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!


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+");

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+");

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



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;
    }

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);

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


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

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

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"

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;
    }

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]);


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}");

-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());
         }
     }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.