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.