dividere la stringa solo in prima istanza - java


145

Voglio dividere una stringa per carattere "=". Ma voglio che si divida solo in prima istanza. Come lo posso fare ? Ecco un esempio JavaScript per '_' char ma non funziona per me dividere la stringa solo sulla prima istanza del carattere specificato

Esempio :

apple=fruit table price=5

Quando provo String.split ('='); Dà

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

Ma ho bisogno

[apple],[fruit table price=5]

Grazie


Non devi scappare =.
Rohit Jain,

Risposte:


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

Come String.split(java.lang.String regex, int limit)spiega:

L'array restituito da questo metodo contiene ogni sottostringa di questa stringa che è terminata da un'altra sottostringa che corrisponde all'espressione data o è terminata dalla fine della stringa. Le sottostringhe nell'array sono nell'ordine in cui si verificano in questa stringa. Se l'espressione non corrisponde a nessuna parte dell'input, l'array risultante ha un solo elemento, ovvero questa stringa.

Il limitparametro controlla il numero di volte in cui viene applicato il motivo e quindi influenza la lunghezza dell'array risultante. Se il limite n è maggiore di zero, il modello verrà applicato al massimo n - 1 volte, la lunghezza dell'array non sarà maggiore di n e l'ultima voce dell'array conterrà tutti gli input oltre l'ultimo delimitatore corrispondente.

La stringa boo:and:foo, ad esempio, produce i seguenti risultati con questi parametri:

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

1
È confuso da capire ma funziona e basta! Grazie!
Clint Eastwood,

4
Alcuni chiarimenti: il limite 2 restituirà un elenco di AT MOST 2 elementi. Può restituire un elenco di 1 elemento se non c'è corrispondenza con l'espressione. Se ci sono 2 corrispondenze all'espressione, il secondo elemento dell'array restituito non verrà diviso.
modle13,


5

Come molte altre risposte suggeriscono l'approccio limite, questo può essere un altro modo

Puoi usare il metodo indexOf su String che restituirà la prima Occasione di un dato carattere, Usando quell'indice puoi ottenere l'output desiderato

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));

2
Questo non si divide ma estrae la seconda parte. Prendere la prima parte richiederebbe ancora un'altra riga di codice ... 4 righe contro 1 = pollice in giù
Clint Eastwood

0

Prova questo codice ...

Sta funzionando.

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

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

Per impostazione predefinita, il metodo split crea n numeri di array sulla base di regex dato. Ma se si desidera limitare il numero di matrici da creare dopo una divisione di passare il secondo argomento come argomento intero.


3
Qual'era il problema? Includi maggiori dettagli per rendere la tua risposta esplicativa!
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_!

mi piace scrivere i miei metodi :)


3
Questo metodo non è troppo utile, poiché il separatore è hardcoded. Inoltre, l'implementazione della ricerca lineare con un ciclo for non presenta alcun vantaggio rispetto all'uso di String.indexOf per trovare la posizione del primo separatore. Terzo, non è intuitivo vedere quanti elementi String vengono restituiti. Mentre parliamo di dividere le cose in due, considera l'utilizzo del tipo di dati Pair <String, String> che rappresenta esattamente due stringhe invece di creare un array.
Gee Bee,
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.