Oto ciąg znaków, na przykład:
"Apple"
i chciałbym dodać zero, aby wypełnić 8 znaków:
"000Apple"
Jak mogę to zrobić?
java
string
formatting
format
Roy
źródło
źródło
("0000" + theString).substring(theString.length())
jest bardziej realistyczny. To padstheString
z wiodącymi zerami. Niestety nie mogłem się powstrzymać przed dodaniem tego komentarza :)StringBuilder
, a wypełnienie go wymaga pętli. Jeśli naprawdę wymagane jest obcięcie tylko 8-znakowych ciągów znaków, jest to w porządku, chociaż jest to bardzo wąski przypadek użycia, ale tego rozwiązania nigdy nie można nazwać szybkim. To jest po prostu krótkie.źródło
%07s
zamiast%07d
, otrzymaszFormatFlagsConversionMismatchException
. możesz tego spróbować.To jest z commons-lang . Zobacz javadoc
źródło
O to tak naprawdę prosił, wierzę:
wynik:
źródło
DuplicateFormatFlagsException
(ze względu na00
ciąg formatu). Jeśli podmienisz ciąg dłuższy niż 8 znaków, spowoduje to wyrzucenieIllegalFormatFlagsException
(z powodu liczby ujemnej).String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
. Teraz nie będziesz mieć tego wyjątku.String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
jest NIEPRAWIDŁOWE, powinno byćString.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(1,9);
.Możesz użyć metody String.format stosowanej w innej odpowiedzi, aby wygenerować ciąg zer,
Można to zastosować do problemu, dynamicznie dostosowując liczbę wiodących zer w ciągu formatu:
Nadal jest to niechlujne rozwiązanie, ale ma tę zaletę, że można określić całkowitą długość wynikowego łańcucha przy użyciu argumentu liczby całkowitej.
źródło
Korzystanie z
Strings
klasy użyteczności Guava :źródło
Możesz użyć tego:
źródło
Byłem w podobnej sytuacji i wykorzystałem to; Jest dość zwięzły i nie musisz zajmować się długością ani inną biblioteką.
Prosty i schludny. Format ciągu znaków powraca,
" Apple"
więc po zamianie spacji na zera daje pożądany wynik.źródło
źródło
Użyj Apache Commons StringUtils.leftPad (lub spójrz na kod, aby stworzyć własną funkcję).
źródło
źródło
Być może będziesz musiał zająć się edgecase. To jest ogólna metoda.
źródło
źródło
źródło
W Javie:
W Scali:
Możesz także zbadać sposób w Javie 8, aby to zrobić za pomocą strumieni i zmniejszyć (podobnie jak w przypadku Scali). Różni się nieco od wszystkich innych rozwiązań i szczególnie mi się podoba.
źródło
Jest to szybkie i działa na dowolną długość.
źródło
Może być szybszy niż odpowiedź Chrisa Lerchera, gdy większość ciągów ma dokładnie 8 znaków
w moim przypadku na moim komputerze 1/8 szybciej.
źródło
Oto prosta wersja „czytelnego skryptu” bez interfejsu API, której używam do wstępnego wypełniania łańcucha. (Prosty, czytelny i regulowany).
źródło
Czy ktoś próbował tego czystego rozwiązania Java (bez SpringUtils):
Niestety to rozwiązanie działa tylko wtedy, gdy nie ma pustych spacji w ciągu.
źródło
Jeśli chcesz napisać program w czystej Javie, możesz postępować zgodnie z poniższą metodą lub istnieje wiele ciągów narzędzi, które pomogą ci lepiej z bardziej zaawansowanymi funkcjami.
Za pomocą prostej metody statycznej można to osiągnąć, jak poniżej.
Możesz użyć powyższej metody
addLeadingText(length, padding text, your text)
Wynik wyniósłby 000Apple
źródło
To nie jest ładne, ale działa. Jeśli masz dostęp do wspólnego apache, sugeruję, aby użyć tego
źródło