Szukasz szybkiego, prostego sposobu w Javie na zmianę tego ciągu
" hello there "
do czegoś, co wygląda tak
"hello there"
gdzie zamieniam wszystkie te spacje na jedną spację, z wyjątkiem tego, że chcę, aby jedna lub więcej spacji na początku łańcucha zniknęła.
Coś takiego prowadzi mnie częściowo do tego
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
ale nie całkiem.
Odpowiedzi:
Spróbuj tego:
Zobacz też
String.trim()
Brak
trim()
wyrażenia regularnegoMożna to również zrobić za pomocą tylko jednego
replaceAll
, ale jest to o wiele mniej czytelne niżtrim()
rozwiązanie. Niemniej jednak podano tutaj, aby pokazać, co może zrobić wyrażenie regularne:Istnieją 3 alternatywy:
^_+
: dowolna sekwencja spacji na początku ciągu$1
, który przechwytuje pusty ciąg_+$
: dowolna sekwencja spacji na końcu ciągu$1
, który przechwytuje pusty ciąg(_)+
: dowolna sekwencja spacji, która nie pasuje do żadnego z powyższych, co oznacza, że jest na środku$1
, który przechwytuje pojedynczą spacjęZobacz też
źródło
trim()
a następniereplaceAll()
zużywa mniej pamięci niż robi to na odwrót. Niewiele, ale jeśli zostanie to wywołane wiele razy, może się sumować, zwłaszcza jeśli jest wiele „przycinalnych białych znaków”. (Trim()
tak naprawdę nie pozbywa się dodatkowej przestrzeni - po prostu ukrywa ją, przesuwając wartości początkową i końcową. Podstawachar[]
pozostaje niezmieniona.)( ) +
albo( ){2,}
powinno być (bardzo) trochę bardziej wydajny;)\\s
zamieni dowolną grupę białych znaków na żądany znak..trim().replaceAll(" +", " ")
(z dwoma spacjami) jest szybszy niż.trim().replaceAll(" +", " ")
(z jednym spacją). Przeprowadziłem testy czasowe dla ciągów, które miały tylko pojedyncze spacje i wszystkie podwójne spacje, i przyszło znacznie szybciej dla obu podczas wykonywania wielu operacji (miliony lub więcej, w zależności od środowiska).Potrzebujesz tylko:
gdzie dopasowujesz jedną lub więcej spacji i zamieniasz je na jedną spację, a następnie przycinasz białe znaki na początku i na końcu (możesz faktycznie odwrócić, najpierw przycinając, a następnie dopasowując, aby regex był szybszy, jak ktoś wskazał).
Aby to szybko przetestować, spróbuj:
i zwróci:
źródło
Użyj wspólnej
StringUtils.normalizeSpace(String str)
metody Apache . Zobacz dokumenty tutajźródło
To działało idealnie dla mnie:
sValue = sValue.trim().replaceAll("\\s+", " ");
źródło
Dopasuje więcej niż jedno miejsce.
WYNIK:
źródło
Aby wyeliminować spacje na początku i na końcu ciągu, użyj
String#trim()
metody. A następnie użyj swojegomytext.replaceAll("( )+", " ")
.źródło
Możesz najpierw użyć
String.trim()
, a następnie zastosować wynik zamiany wyrażenia regularnego.źródło
Poniższy kod zagęści wszelkie spacje między słowami i usunie je na początku i na końcu łańcucha
To wyjdzie
a string with many spaces, a tab and a newline
Pamiętaj, że wszelkie znaki niedrukowalne, w tym spacje, tabulatory i znaki nowej linii, zostaną zagęszczone lub usunięte
Aby uzyskać więcej informacji, zobacz odpowiednią dokumentację:
źródło
Spróbuj tego.
Przykładowy kod
WYNIK
Najpierw zastąpi wszystkie spacje pojedynczym spacją. Następnie musimy wykonać przycinanie,
String
ponieważ PoczątekString
i KoniecString
tego zastąpi całą przestrzeń pojedynczym miejscem, jeśliString
ma spacje na początkuString
i na końcuString
Więc musimy je przyciąć. Niż dostajesz swoje upragnioneString
.źródło
Możesz także użyć lookaroundów.
LUB
<space>(?= )
dopasowuje znak spacji, po którym następuje inny znak spacji. Tak więc w kolejnych spacjach pasowałby do wszystkich spacji oprócz ostatniego, ponieważ nie następuje po nim spacja. To pozostawia ci jedną spację dla kolejnych spacji po operacji usuwania.Przykład:
źródło
trym()
Usuwa tylko spacje wiodące i końcowe.
Z Java Doc: „Zwraca ciąg, którego wartością jest ten ciąg, z usuniętymi początkowymi i końcowymi spacjami”.
„D ev Dum my”
replace (), replaceAll ()
Zastępuje wszystkie puste ciągi w słowie,
Wynik:
Uwaga: „\ s +” jest wyrażeniem regularnym podobnym do znaku pustej spacji.
Odniesienie: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
źródło
Jak dotąd podano wiele poprawnych odpowiedzi i widzę wiele pozytywnych opinii. Wymienione sposoby będą jednak działać, ale nie do końca zoptymalizowane lub nieczytelne. Ostatnio natknąłem się na rozwiązanie, które spodoba się każdemu deweloperowi.
Gotowe. To jest czytelne rozwiązanie.
źródło
W Kotlinie wyglądałoby to tak
źródło
najpierw zmniejsz spacje
wielką literą pierwszą literę i wielkie litery, wszystko inne
źródło
źródło
To zadziałało dla mnie
gdzie filtr podąża za funkcją, a skan jest łańcuchem wejściowym:
źródło
powinieneś to zrobić w ten sposób
umieść + wewnątrz okrągłych nawiasów.
źródło
źródło
Widzieć
String.replaceAll
.Użyj wyrażenia regularnego
"\s"
i zamień na" "
.Następnie użyj
String.trim
.źródło
new String(" hello there ").trim().replaceAll("\\s+", " ")
Sprawdź to...
Jeśli String zawiera tylko pojedyncze spacje, replace () nie zastąpi,
Jeśli spacje są więcej niż jeden, wówczas akcja replace () wykonuje i usuwa spację.
Aby policzyć liczbę spacji w ciągu.
Wzorzec .quote („?”) Zwraca dosłowny wzorzec String.
źródło
Moja metoda, zanim znalazłem drugą odpowiedź, używając wyrażenia regularnego jako lepszego rozwiązania. Może ktoś potrzebuje tego kodu.
źródło
\s
oznacza wyrażenie regularne (spacja, tabulator, nowa linia, wysuw formularza).Wersja strumienia, filtry spacji i tabulatorów.
źródło
źródło
Najprostsza metoda usuwania białych znaków w dowolnym miejscu ciągu.
źródło
Powyższe rozwiązanie jest algorytmem o złożoności O (n) bez użycia jakiejkolwiek funkcji Java.
źródło
Proszę użyć poniższego kodu
źródło
Cześć przepraszam za opóźnienie! Oto najlepsza i najbardziej efektywna odpowiedź, której szukasz:
Więc twój wynik w tym przykładzie będzie: Nazywam się Kingkon.
Jednak ta metoda usunie również „\ n”, który może mieć Twój ciąg. Więc jeśli nie chcesz, skorzystaj z tej prostej metody:
A jeśli chcesz też usunąć spacje wiodące i końcowe, po prostu dodaj:
źródło
Wiem, że metoda replaceAll jest znacznie łatwiejsza, ale chciałem to również opublikować.
źródło
źródło