Come dividere una stringa per spazio


329

Devo dividere la mia stringa per spazi. Per questo ho provato:

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

Ma non sembra funzionare.


3
Sembra buono ... quali sono i valori nell'array "diviso"?
npinti,

1
Il tuo codice funziona davvero così com'è. Guarda il codice eseguito dal vivo su IdeOne.com .
Basil Bourque,

@BasilBourque - Non sono riuscito a trovare alcun pulsante di esecuzione su quel link
nanosoft

1
@nanosoft La pagina su IdeOne.com viene eseguita automaticamente al caricamento. Vedi l'output sotto il codice, nella sezione stdout . Per modificare il codice, fai clic sul forkcollegamento nell'angolo in alto a sinistra.
Basil Bourque,

Risposte:


639

Quello che hai dovrebbe funzionare. Se, tuttavia, gli spazi forniti sono predefiniti a ... qualcos'altro? Puoi usare la regex degli spazi bianchi:

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

Ciò farà sì che un numero qualsiasi di spazi consecutivi divida la stringa in token.

Come nota a margine, non sono sicuro che "diviso" sia una parola :) Credo che anche lo stato di essere vittima di una scissione sia "diviso". È una di quelle cose grammaticali difficili :-) Non cercare di essere schizzinoso, ho solo pensato di passarlo!


45
Sono svizzero cosa ti aspettavi, il mio inglese non è il migliore; P, comunque grazie!
safari,

29
:-) Ehi, non è grande. Ho usato alcuni nomi di variabili ridicoli (nel codice probabilmente non avrei dovuto lasciarmi andare dal vivo!) Non stavo cercando di essere un nazista della grammatica o altro, passando solo un po 'di curiosità, tutto qui.
corsiKa

7
@Safari, hai appena ricevuto 2 ottimi consigli sul prezzo di 1. sto solo scherzando. Bella risposta.
Nirmal Mangal,

8
"Quello che hai dovrebbe funzionare" Dico qualcosa di simile abbastanza frequentemente quando il mio codice si rompe.
Griffin,

1
Lo trovo utile poiché il mio caso d'uso è stato quello di dividere la stringa e rimuovere più spazi. Una riga di codice fa entrambe le cose per me.
Niharika Upadhyay,

87

Mentre la risposta accettata è buona, tieni presente che finirai con una stringa vuota iniziale se la stringa di input inizia con uno spazio bianco. Ad esempio, con:

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

Il risultato sarà:

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

Quindi potresti voler tagliare la corda prima di dividerla:

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

29

Credo che inserire una espressione regolare tra parentesi str.split dovrebbe risolvere il problema. Il metodo Java String.split () si basa su espressioni regolari, quindi ciò di cui hai bisogno è:

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

12

Utilizzare Stringutils.split()per dividere la stringa per i bianchi. Ad esempio, StringUtils.split("Hello World")restituisce "Hello" e "World";

Per risolvere il caso menzionato utilizziamo il metodo split come questo

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

quando stampiamo l'array split l'output sarà:

Ciao

io sono

il tuo

Corda

Per un esempio completo di demo, controlla qui



6

se in qualche modo non vuoi usare il metodo String split, puoi usare la classe StringTokenizer in Java come ..

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

Esiste la possibilità di generare un'eccezione ArrayIndexOutofBounds.
Ajay Takur,

2
No, questo non genererà "ArrayIndexOutofBounds" perché ho dichiarato la dimensione dell'array in base al numero di token trovati in String. questo assicurerà che la dimensione degli array non sia superiore ai token ricevuti in una stringa.
Muhammad Suleman,

6

Prova questo

    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

Un modo alternativo sarebbe:

import java.util.regex.Pattern;

...

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

L'ho visto qui


3

OK, quindi dobbiamo fare una scissione poiché hai già ottenuto la risposta, la generalizzerei.

Se vuoi dividere qualsiasi stringa per spazi, delimitatore (caratteri speciali).

Innanzitutto, rimuovi lo spazio iniziale mentre creano la maggior parte dei problemi.

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

Rimuovere innanzitutto lo spazio iniziale che può essere spazio, tab ecc.

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

Ora se vuoi dividere per spazio o qualsiasi carattere speciale.

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

Ma poiché w contiene [a-zA-Z_0-9], quindi se vuoi dividere per trattino basso (_) usa anche

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space

Mi ha replaceAll("^\\s+","")salvato la giornata. Ha funzionato per il mio caso. Grazie
Kostas Asargiotakis

2

Esempio molto semplice di seguito:

Spero che sia d'aiuto.

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

puoi separare la stringa usando il codice qui sotto

   String thisString="Hello world";

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

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

    String second = parts[1];//"World"

0

Ecco un metodo per tagliare una stringa che ha uno "," o uno spazio bianco

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

        return output;
    }

0

Dal momento che è passato un po 'di tempo da quando sono state pubblicate queste risposte, ecco un altro modo più attuale per fare ciò che viene chiesto:

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

Ora hai un elenco di stringhe (che è probabilmente migliore di un array); se hai bisogno di un array, puoi farlooutput.toArray(new String[0]);


0

Non solo spazi bianchi, ma la mia soluzione risolve anche i personaggi invisibili.

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");

-1

Corda semplice da sputare di Space

    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());
         }
     }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.