Comment empêcher java.lang.Ssortingng.split () de créer une chaîne vide en tête?

le fait de passer 0 en tant qu’argument de limite empêche de suivre les chaînes vides, mais comment empêcher les chaînes vides?

par exemple

Ssortingng[] test = "/Test/Stuff".split("/"); 

donne un tableau avec “”, “Test”, “Stuff”.

Oui, je sais que je pourrais lancer mon propre Tokenizer … mais les docs de l’API pour SsortingngTokenizer disent

“SsortingngTokenizer est une classe héritée qui est conservée pour des raisons de compatibilité bien que son utilisation soit déconseillée dans le nouveau code. Il est recommandé à toute personne recherchant cette fonctionnalité d’utiliser le fractionnement”

Votre meilleur pari est probablement de supprimer tout délimiteur principal:

 Ssortingng input = "/Test/Stuff"; Ssortingng[] test = input.replaceFirst("^/", "").split("/"); 

Vous pouvez le rendre plus générique en le mettant dans une méthode:

 public Ssortingng[] mySplit(final Ssortingng input, final Ssortingng delim) { return input.replaceFirst("^" + delim, "").split(delim); } Ssortingng[] test = mySplit("/Test/Stuff", "/"); 

Apache Commons a une méthode utilitaire pour exactement cela: org.apache.commons.lang.SsortingngUtils.split

SsortingngUtils.split ()

En fait, dans notre entreprise, nous préférons maintenant utiliser cette méthode pour diviser tous nos projets.

Je ne pense pas que vous puissiez le faire avec la méthode de split intégrée. Donc, vous avez deux options:

1) Faites votre propre division

2) parcourir le tableau après avoir appelé split et supprimer les éléments vides

Si vous faites votre propre division, vous pouvez simplement combiner ces deux options

 public List split(Ssortingng inSsortingng) { List outList = new ArrayList<>(); String[] test = inString.split("/"); for(String s : test) { if(s != null && s.length() > 0) outList.add(s); } return outList; } 

ou vous pouvez simplement vérifier que le délimiteur se trouve dans la première position avant d’appeler split et ignorer le premier caractère s’il le fait:

 Ssortingng delimiter = "/"; Ssortingng delimitedSsortingng = "/Test/Stuff"; Ssortingng[] test; if(delimitedSsortingng.startsWith(delimiter)){ //start at the 1st character not the 0th test = delimitedSsortingng.subssortingng(1).split(delimiter); } else test = delimitedSsortingng.split(delimiter); 

Je pense que vous devrez supprimer manuellement la première chaîne vide. Une façon simple de le faire est la suivante –

  Ssortingng ssortingng, subSsortingng; int index; Ssortingng[] test; ssortingng = "/Test/Stuff"; index = ssortingng.indexOf("/"); subSsortingng = ssortingng.subssortingng(index+1); test = subSsortingng.split("/"); 

Cela exclura la première chaîne vide.

Je pense qu’il n’y a pas de fonction intégrée pour supprimer les chaînes vierges en Java. Vous pouvez éliminer la chaîne de suppression de blanc mais cela peut entraîner des erreurs. Pour plus de sécurité, vous pouvez le faire en écrivant un petit morceau de code comme suit:

  List list = new ArrayList(); for(Ssortingng str : test) { if(str != null && str.length() > 0) { list.add(str); } } test = ssortingngList.toArray(new Ssortingng[list.size()]); 

Vous pouvez utiliser SsortingngTokenizer à cette fin …

 Ssortingng test1 = "/Test/Stuff"; SsortingngTokenizer st = new SsortingngTokenizer(test1,"/"); while(st.hasMoreTokens()) System.out.println(st.nextToken()); 

C’est comme ça que j’ai compris ce problème. Je prends la chaîne, appelez .toCharArray () pour la diviser en un tableau de caractères, puis parcourez ce tableau et ajoutez-le à ma liste de chaînes (en enveloppant chaque caractère avec Ssortingng.valueOf). J’imagine qu’il y a un compromis entre les performances, mais cela semble être une solution lisible. J’espère que cela t’aides!

  char[] ssortingngChars = ssortingng.toCharArray(); List ssortingngList = new ArrayList<>(); for (char stringChar : stringChars) { stringList.add(String.valueOf(stringChar)); }