Widziałem pytania, jak przedrostek zer tutaj w SO. Ale nie na odwrót!
Czy możecie mi zasugerować, jak usunąć wiodące zera w tekście alfanumerycznym? Czy są jakieś wbudowane interfejsy API lub czy muszę napisać metodę przycinania zer wiodących?
Przykład:
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
jai
źródło
źródło
.replaceFirst("^0+(?!$)".toRegex(), "")
Możesz użyć klasy StringUtils z Apache Commons Lang w następujący sposób:
źródło
Co powiesz na sposób wyrażenia regularnego:
Do
^
kotwy do początku łańcucha (jestem zakładając z kontekstu struny nie są multi-line tutaj, w przeciwnym razie może trzeba spojrzeć\A
na początku wejścia zamiast początku linii). Te0*
środki zero lub więcej0
znaków (użytkownik mógł korzystać0+
również). PoreplaceFirst
prostu zastępuje wszystkie te0
postacie na początku niczym.A jeśli, podobnie jak Vadzim, twoja definicja zer wiodących nie obejmuje zamiany
"0"
(lub"000"
podobnych ciągów) na pusty ciąg (wystarczająco racjonalne oczekiwanie), po prostu odłóż go, jeśli to konieczne:źródło
Przejrzysty sposób bez potrzeby regExp i bibliotek zewnętrznych.
źródło
Aby przejść do odpowiedzi Apache Commons thelost: używając bibliotek guava ( biblioteki narzędziowej Java firmy Google, która, jak twierdzę, powinna znajdować się na ścieżce klasowej każdego nietrywialnego projektu Java), użyłaby CharMatchera :
źródło
Jeśli korzystasz z Kotlin Jest to jedyny potrzebny kod:
źródło
Możesz po prostu zrobić:
String s = Integer.valueOf("0001007").toString();
źródło
Użyj
StringUtils
klasy Apache Commons :źródło
Użyj tego:
źródło
Używanie Regexp z grupami:
źródło
Użycie wyrażenia regularnego, jak sugerują niektóre odpowiedzi, jest dobrym sposobem na zrobienie tego. Jeśli nie chcesz używać wyrażenia regularnego, możesz użyć tego kodu:
źródło
String
... zamiast tego użyj narzędzia Magiccrafter .Myślę, że tak łatwo to zrobić. Możesz po prostu zapętlić ciąg od początku i usuwać zera, aż znajdziesz niezerowy znak.
źródło
Jeśli (podobnie jak ja) musisz usunąć wszystkie zera wiodące z każdego „słowa” w ciągu, możesz zmodyfikować odpowiedź @polygenelubricants na następujące:
Co skutkuje w:
źródło
Bez użycia
Regex
lubsubstring()
funkcji, naString
których będzie nieefektywny -źródło
Możesz zamienić
"^0*(.*)"
na na"$1"
regexźródło
źródło
Jeśli nie chcesz używać wyrażenia regularnego lub biblioteki zewnętrznej. Możesz zrobić z „for”:
źródło
String
wygenerowanych podczas tej pętli ... jeśli jest ich 10000
...Przeprowadziłem kilka testów porównawczych i odkryłem, że najszybszym (jak dotąd) sposobem jest to rozwiązanie:
Zwłaszcza wyrażenia regularne są bardzo powolne w długiej iteracji. (Musiałem znaleźć najszybszy sposób na partię).
źródło
A może po prostu poszukiwanie pierwszego niezerowego znaku?
Wyrażenie regularne znajduje pierwszą cyfrę od 1 do 9, po której następuje dowolna liczba cyfr, więc dla „00012345” zwraca „12345” . Można go łatwo dostosować do ciągów alfanumerycznych.
źródło