290 votes

Comment supprimer les zéros de texte alphanumérique ?

J’ai vu des questions sur la façon de faire précéder les zéros ici dans SO. Mais non l’inverse !

Vous les gars pouvez me suggérer comment faire pour supprimer les zéros en texte alphanumérique ? Existe-t-il une API intégré ou je dois écrire une méthode pour couper des zéros ?

Exemple :

731voto

polygenelubricants Points 136838

Regex est le meilleur outil pour le travail; ce qu'il devrait être dépend de la définition du problème. Le suivant supprime les zéros à gauche, mais qui laisse un si nécessaire (c'est à dire qu'il ne serait pas juste de tourner "0" à une chaîne vide).

s.replaceFirst("^0+(?!$)", "")

L' ^ ancre assurez-vous que l' 0+ compensée est au début de l'entrée. L' (?!$) d'anticipation négatif garantit pas l'ensemble de la chaîne de caractères à rechercher.

Harnais de Test:

String[] in = {
    "01234",         // "[1234]"
    "0001234a",      // "[1234a]"
    "101234",        // "[101234]"
    "000002829839",  // "[2829839]"
    "0",             // "[0]"
    "0000000",       // "[0]"
    "0000009",       // "[9]"
    "000000z",       // "[z]"
    "000000.z",      // "[.z]"
};
for (String s : in) {
    System.out.println("[" + s.replaceFirst("^0+(?!$)", "") + "]");
}

Voir aussi

146voto

Vous pouvez utiliser la classe StringUtils de Apache Commons Lang comme suit :

38voto

paxdiablo Points 341644

Comment au sujet de la regex façon:

String s = "001234-a";
s = s.replaceFirst ("^0*", "");

L' ^ ancres pour le début de la chaîne (je suis en supposant à partir du contexte de vos chaînes ne sont pas multi-ligne ici, sinon vous pouvez avoir besoin de regarder en \A pour le début de l'entrée, plutôt que de début de ligne). L' 0* signifie zéro ou plus 0 caractères (vous pourriez utiliser 0+ ). L' replaceFirst , remplace simplement tous ceux - 0 des personnages à la commencer avec rien.

Et si, comme Vadzim, votre définition de zéros ne comprend pas tourner "0" (ou "000" ou des chaînes similaires) en une chaîne vide (un rationnel suffisamment d'attente), il suffit de le mettre en arrière si nécessaire:

String s = "00000000";
s = s.replaceFirst ("^0*", "");
if (s.isEmpty()) s = "0";

30voto

magiccrafter Points 81

Une manière claire, sans avoir besoin de regExp et toutes les bibliothèques externes.

15voto

Cowan Points 17235

Pour aller avec la réponse de Apache Commons de thelost : à l’aide de goyave-bibliothèques (Google polyvalent Java bibliothèque d’utilitaires qui je dirais devrait maintenant être sur le chemin de classe de tout projet de Java non négligeable), il utiliserait CharMatcher:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X