Czy w Javie jest wbudowana funkcja, która zapisuje pierwszy znak każdego słowa w ciągu i nie wpływa na pozostałe?
Przykłady:
jon skeet
->Jon Skeet
miles o'Brien
->Miles O'Brien
(B pozostaje kapitałem, wyklucza to tytuł Case)old mcdonald
->Old Mcdonald
*
* (też Old McDonald
by się to znalazło, ale nie oczekuję, że będzie TAKIE mądre.)
Szybkie spojrzenie na dokumentację napisów Java ujawnia tylko toUpperCase()
i toLowerCase()
, które oczywiście nie zapewniają pożądanego zachowania. Oczywiście wyniki Google są zdominowane przez te dwie funkcje. Wygląda to na koło, które musiało zostać już wynalezione, więc nie zaszkodzi zapytać, abym mógł z niego korzystać w przyszłości.
old mcdonald
? Czy to powinno się staćOld McDonald
?Odpowiedzi:
WordUtils.capitalize(str)
(z apache commons-text )(Uwaga: jeśli musisz
"fOO BAr"
zostać"Foo Bar"
, użyjcapitalizeFully(..)
zamiast tego)źródło
WordUtils.capitalizeFully(str)
jest rozwiązanie.Jeśli martwisz się tylko, że pierwsza litera pierwszego słowa jest pisana wielką literą:
źródło
line
że jesteś zerowy lub masz długość <2.Poniższa metoda konwertuje wszystkie litery na wielkie / małe litery, w zależności od ich położenia w pobliżu spacji lub innych znaków specjalnych.
źródło
if(Character.isLetter(chars[i])) { if(!found) { chars[i] = Character.toUpperCase(chars[i]); } found = true; } else { found = false; }
.found
napreviousCharIsLetter
.Wypróbuj ten bardzo prosty sposób
przykład podanyString = "ram jest dobrym chłopcem"
Wyjście będzie: Ram Is Good Boy
źródło
Napisałem małą klasę, aby wielkie litery wszystkich słów składały się z wielkich liter.
Opcjonalnie
multiple delimiters
, każdy z zachowaniem (wielkie litery przed, po lub oba, aby obsłużyć przypadki takie jakO'Brian
);Opcjonalne
Locale
;Nie zrywaj z
Surrogate Pairs
.DEMO NA ŻYWO
Wynik:
Uwaga: pierwsza litera zawsze będzie pisana wielkimi literami (jeśli nie chcesz, edytuj źródło).
Podziel się swoimi komentarzami i pomóż mi znaleźć błędy lub poprawić kod ...
Kod:
źródło
źródło
Zrobiłem rozwiązanie w Javie 8, które jest IMHO bardziej czytelne.
Gist dla tego rozwiązania można znaleźć tutaj: https://gist.github.com/Hylke1982/166a792313c5e2df9d31
źródło
Używanie
org.apache.commons.lang.StringUtils
czyni to bardzo prostym.źródło
StringUtils.capitalise(str)
jest przestarzałe. Zobacz: commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/…Za pomocą tego prostego kodu :
Wynik: cześć
źródło
Korzystam z następującej funkcji. Myślę, że wydajność jest szybsza.
źródło
Z Java 9+
możesz użyć w
String::replaceAll
ten sposób:Przykład:
Wyjścia
źródło
Użyj metody podziału, aby podzielić ciąg na słowa, a następnie użyj wbudowanych funkcji ciągów, aby wstawić wielkie słowa do każdego słowa, a następnie dodaj je razem.
Pseudokod (ish)
Na końcu napis wygląda jak „Zdanie, do którego chcesz zastosować czapki”
źródło
Może to być przydatne, jeśli potrzebujesz wielkich liter. Wielkie podciąg jest rozdzielany wielkimi literami
" "
, z wyjątkiem określonych ciągów, takich jak"a"
lub"the"
. Nie uruchomiłem go jeszcze, ponieważ jest późno, choć powinno być w porządku.StringUtils.join()
W pewnym momencie korzysta z Apache Commons . Jeśli chcesz, możesz zastąpić go prostą pętlą.źródło
źródło
źródło
Postanowiłem dodać jeszcze jedno rozwiązanie dla wielkich liter w ciągu:
Funkcjonować:
Przykładowe wywołanie:
Wynik:
źródło
Posługiwać się:
źródło
Istnieje wiele sposobów konwersji pierwszej litery pierwszego słowa, które jest pisane wielką literą. Mam pomysł. To jest bardzo proste:
źródło
źródło
Oto prosta funkcja
źródło
To tylko kolejny sposób na zrobienie tego:
źródło
Metoda wielokrotnego użytku dla intiCap:
źródło
Oto moje rozwiązanie.
Natknąłem się dziś na ten problem i postanowiłem go przeszukać. Znalazłem odpowiedź Neelama Singha, która była już prawie na miejscu, więc postanowiłem naprawić problem (zepsułem puste ciągi) i spowodowałem awarię systemu.
Metoda, której szukasz, została nazwana
capString(String s)
poniżej. Okazuje się, że „Tu jest tylko 5 rano” w „To tylko 5 rano tutaj”.Kod jest dość dobrze skomentowany, więc baw się dobrze.
źródło
1. Strumienie Java 8
Przykłady:
W tym
foo bAR
celuFoo Bar
zastąpmap()
metodę następującą:2.
String.replaceAll()
(Java 9+)Przykłady:
3. Tekst Apache Commons
W przypadku titlecase:
Aby uzyskać szczegółowe informacje, sprawdź ten samouczek .
źródło
Dla tych, którzy używają Velocity w swoim MVC, możesz użyć
capitalizeFirstLetter()
metody z klasy StringUtils .źródło
źródło
źródło
Jeśli wolisz Guava ...
źródło
źródło
Krótki i precyzyjny sposób jest następujący:
Działa bezbłędnie, jeśli spróbujesz zmienić wartość nazwy na trzy wartości. Bez błędów.
źródło