J'ai vu des questions sur la façon de préfixer les zéros ici dans SO. Mais pas l'inverse!
Pouvez-vous me suggérer comment supprimer les zéros de tête dans le texte alphanumérique? Existe-t-il des API intégrées ou dois-je écrire une méthode pour couper les zéros non significatifs?
Exemple:
01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839
java
string
alphanumeric
I have
la source
la source
.replaceFirst("^0+(?!$)".toRegex(), "")
Vous pouvez utiliser la classe StringUtils d' Apache Commons Lang comme ceci:
la source
Que diriez-vous de la manière regex:
Les
^
ancres au début de la chaîne (je suppose que, selon le contexte, vos chaînes ne sont pas multilignes ici, sinon vous devrez peut-être rechercher le\A
début de l'entrée plutôt que le début de la ligne). Le0*
signifie zéro ou plusieurs0
caractères (vous pouvez également les utiliser0+
). LereplaceFirst
remplace simplement tous ces0
personnages au début par rien.Et si, comme Vadzim, votre définition des zéros non significatifs n'inclut pas de transformer
"0"
(ou"000"
des chaînes similaires) en une chaîne vide (une attente suffisamment rationnelle), remettez-la simplement si nécessaire:la source
Un moyen clair sans avoir besoin de regExp et de bibliothèques externes.
la source
Pour aller avec la réponse d'Apache Commons de thelost: en utilisant les bibliothèques de goyaves (la bibliothèque d'utilitaires Java à usage général de Google qui, selon moi, devrait maintenant être sur le chemin de classe de tout projet Java non trivial), cela utiliserait CharMatcher :
la source
Si vous utilisez Kotlin C'est le seul code dont vous avez besoin:
la source
Vous pourriez simplement faire:
String s = Integer.valueOf("0001007").toString();
la source
Utilisez la
StringUtils
classe Apache Commons :la source
Utilisez ceci:
la source
Utilisation de Regexp avec des groupes:
la source
Utiliser l'expression régulière comme le suggèrent certaines des réponses est un bon moyen de le faire. Si vous ne souhaitez pas utiliser l'expression régulière, vous pouvez utiliser ce code:
la source
String
... utiliser l' approche de magiccrafter à la place.Je pense que c'est si facile de faire ça. Vous pouvez simplement parcourir la chaîne depuis le début et supprimer les zéros jusqu'à ce que vous trouviez un caractère non nul.
la source
Si vous (comme moi) devez supprimer tous les zéros de tête de chaque "mot" d'une chaîne, vous pouvez modifier la réponse de @polygenelubricants aux éléments suivants:
ce qui se traduit par:
la source
Sans utiliser
Regex
nisubstring()
fonction surString
laquelle sera inefficace -la source
Vous pouvez remplacer
"^0*(.*)"
to"$1"
par regexla source
la source
Si vous ne souhaitez pas utiliser regex ou bibliothèque externe. Vous pouvez faire avec "pour":
la source
String
générés pendant cette boucle ... s'il y en a 10000
...J'ai fait quelques tests de référence et constaté que le moyen le plus rapide (de loin) est cette solution:
Les expressions particulièrement régulières sont très lentes dans une longue itération. (J'avais besoin de trouver le moyen le plus rapide pour un batchjob.)
la source
Et qu'en est-il de la recherche du premier caractère non nul?
Cette expression régulière trouve le premier chiffre entre 1 et 9 suivi d'un nombre quelconque de chiffres, donc pour "00012345", il renvoie "12345" . Il peut être facilement adapté aux chaînes alphanumériques.
la source