chaîne divisée uniquement sur la première instance - java


145

Je veux diviser une chaîne par le caractère '='. Mais je veux qu'il soit divisé en première instance uniquement. Comment puis je faire ça ? Voici un exemple JavaScript pour le caractère '_', mais cela ne fonctionne pas pour moi. Split string uniquement sur la première instance du caractère spécifié

Exemple :

apple=fruit table price=5

Quand j'essaye String.split ('='); il donne

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

Mais, j'ai besoin

[apple],[fruit table price=5]

Merci


Vous n'avez pas besoin de vous échapper =.
Rohit Jain

Réponses:


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

Comme l' String.split(java.lang.String regex, int limit)explique:

Le tableau retourné par cette méthode contient chaque sous-chaîne de cette chaîne qui se termine par une autre sous-chaîne qui correspond à l'expression donnée ou se termine par la fin de la chaîne. Les sous-chaînes du tableau sont dans l'ordre dans lequel elles apparaissent dans cette chaîne. Si l'expression ne correspond à aucune partie de l'entrée, le tableau résultant n'a qu'un seul élément, à savoir cette chaîne.

Le limitparamètre contrôle le nombre de fois où le motif est appliqué et affecte donc la longueur du tableau résultant. Si la limite n est supérieure à zéro, le modèle sera appliqué au plus n - 1 fois, la longueur du tableau ne sera pas supérieure à n et la dernière entrée du tableau contiendra toutes les entrées au-delà du dernier délimiteur correspondant.

La chaîne boo:and:foo, par exemple, donne les résultats suivants avec ces paramètres:

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
C'est déroutant à comprendre mais ça marche! Merci!
Clint Eastwood

4
Quelques précisions: la limite 2 renverra une liste d'AT MOST 2 éléments. Il peut renvoyer une liste de 1 élément s'il n'y a pas de correspondance avec l'expression. S'il y a 2 correspondances à l'expression, le deuxième élément du tableau retourné ne sera pas divisé.
modle13


5

Comme beaucoup d'autres réponses suggèrent l'approche limite, cela peut être une autre façon

Vous pouvez utiliser la méthode indexOf sur String qui retournera la première occurrence du caractère donné, en utilisant cet index, vous pouvez obtenir la sortie souhaitée

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

2
Cela ne divise pas mais extrait la deuxième partie. Prendre la première partie nécessiterait encore une autre ligne de code ... 4 lignes contre 1 = pouces vers le bas
Clint Eastwood

0

Essayez ce code ...

Ça marche.

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

Par défaut, la méthode de fractionnement crée n nombres de tableaux sur la base d'une expression régulière donnée. Mais si vous souhaitez restreindre le nombre de tableaux à créer après un fractionnement, passez le deuxième argument en tant qu'argument entier.


3
Quel était le problème? Incluez plus de détails pour que votre réponse soit explicite!
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_!

j'aime écrire mes propres méthodes :)


3
Cette méthode n'est pas très utile, car le séparateur est codé en dur. De plus, la mise en œuvre de la recherche linéaire avec une boucle for n'apporte aucun avantage par rapport à l'utilisation de String.indexOf pour trouver l'emplacement du premier séparateur. Troisièmement, il n'est pas intuitif de voir combien d'éléments String sont renvoyés. Lorsque nous parlons de diviser les choses en deux, envisagez d'utiliser le type de données Pair <String, String> qui représente exactement deux chaînes au lieu de créer un tableau.
Gee Bee
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.