Mam taki ciąg:
mysz = "name=john age=13 year=2001";
Chcę usunąć białe znaki w ciągu. Próbowałem, trim()
ale to usuwa tylko białe spacje przed i po całym ciągu. Próbowałem też, replaceAll("\\W", "")
ale potem =
również został usunięty.
Jak mogę uzyskać ciąg za pomocą:
mysz2 = "name=johnage=13year=2001"
java
whitespace
zyamat
źródło
źródło
\\W
oznacza wszystkie nie-słowa patrz download.oracle.com/javase/6/docs/api/java/util/regex/…Odpowiedzi:
st.replaceAll("\\s+","")
usuwa wszystkie białe znaki i niewidoczne znaki (np. tab,\n
).st.replaceAll("\\s+","")
ist.replaceAll("\\s","")
dają ten sam wynik.Drugi regex jest o 20% szybszy niż pierwszy, ale wraz ze wzrostem liczby kolejnych spacji pierwsze działa lepiej niż drugie.
Przypisz wartość do zmiennej, jeśli nie zostanie użyta bezpośrednio:
źródło
\w
= Wszystko, co jest znakiem słownym\W
= Wszystko, co nie jest słowem (w tym interpunkcja itp.)\s
= Wszystko, co jest spacją (w tym spacja, tabulatory itp.)\S
= Wszystko, co nie jest spacją (w tym zarówno litery, jak i cyfry, a także znaki interpunkcyjne itp.)(Edycja: Jak już wspomniano, musisz uciec przed odwrotnym ukośnikiem, jeśli chcesz
\s
dotrzeć do silnika wyrażeń regularnych, w wyniku czego\\s
.)źródło
Najbardziej poprawna odpowiedź na pytanie to:
Właśnie dostosowałem ten kod z innych odpowiedzi. Publikuję go, ponieważ oprócz tego, że jest dokładnie tym, o co pytano, pokazuje również, że wynik jest zwracany jako nowy ciąg, oryginalny ciąg nie jest modyfikowany, jak sugerują niektóre odpowiedzi.
(Doświadczeni programiści Java mogą powiedzieć „oczywiście nie można tak naprawdę modyfikować łańcucha”, ale odbiorcy docelowi tego pytania mogą o tym nie wiedzieć).
źródło
S
ale nie zastępuje łańcucha, któryS
wskazuje.Jak o
replaceAll("\\s", "")
. Zobacz tutaj .źródło
Jednym ze sposobów obsługi manipulacji ciągami jest StringUtils ze wspólnego Apache.
Możesz go znaleźć tutaj . commons-lang zawiera o wiele więcej i jest dobrze obsługiwany.
źródło
Jeśli chcesz również usunąć niezniszczalne spacje, możesz zaktualizować swój kod w następujący sposób:
źródło
" ab c "
Jeśli wolisz klasy narzędziowe od wyrażeń regularnych , istnieje metoda trimAllWhitespace (String) w StringUtils w Spring Framework.
źródło
Masz już poprawną odpowiedź od Gursel Koca, ale wierzę, że istnieje spora szansa, że nie tak naprawdę chcesz to zrobić. Co powiesz na parsowanie kluczowych wartości?
źródło
Powinieneś użyć
zamiast:
W ten sposób będzie działać z więcej niż jedną spacją między każdym łańcuchem. Znak + w powyższym wyrażeniu regularnym oznacza „jeden lub więcej \ s”
źródło
replaceAll
powtarza się, dopóki wzorzec nie pasuje do żadnej części łańcucha.+
Mogą sprawić, że nieznacznie bardziej przyjazne dla CPU, ponieważ kolejny spacje są obsługiwane w jednym zastąpić operację, ale to jedyna różnica w tym przypadku. RzeczywiścieAll
, to nie+
zastępuje niesekwencyjne białe znaki w ciągu.Najłatwiej to zrobić, używając
org.apache.commons.lang3.StringUtils
klasycommons-lang3
biblioteki, na przykład „commons-lang3-3.1.jar
”.Użyj statycznej metody „
StringUtils.deleteWhitespace(String str)
” na łańcuchu wejściowym, a on zwróci ci łańcuch po usunięciu z niego wszystkich białych spacji. Wypróbowałem przykładowy ciąg „name=john age=13 year=2001
” i zwrócił mi dokładnie ciąg, który chciałeś - „name=johnage=13year=2001
”. Mam nadzieję że to pomoże.źródło
Możesz to zrobić po prostu przez
źródło
źródło
// działa dobrze z dowolnymi spacjami * nie zapomnij spacji w żądle b
źródło
\W
oznacza „znak inny niż słowo”. Wzór dla białych znaków to\s
. Jest to dobrze udokumentowane we wzorcu javadoc .źródło
W java możemy wykonać następujące operacje:
w tym celu musisz zaimportować następujące pakiety do swojego programu:
mam nadzieję, że ci to pomoże.
źródło
Korzystanie z Pattern And Matcher jest bardziej dynamiczne.
źródło
Posługiwać się
mysz.replaceAll("\\s+","");
źródło
Użyj klasy ciągu ciągu apache lepiej jest unikać NullPointerException
Wynik
źródło
Podczas korzystania
st.replaceAll("\\s+","")
w Kotlin , upewnij się zawijać"\\s+"
z Regex :źródło
Po pierwsze z miejscem, po drugie bez miejsca.
To jest zrobione.
źródło
[ \t\n\x0B\f\r]
. Robisz tylko normalne[ ]
spacje.źródło
istnieje wiele sposobów rozwiązania tego problemu. możesz użyć funkcji podziału lub zastąpić funkcję ciągów.
Aby uzyskać więcej informacji, zapoznaj się z podobnym problemem http://techno-terminal.blogspot.in/2015/10/how-to-remove-spaces-from-given-string.html
źródło
Aby usunąć spacje w swoim przykładzie, jest to inny sposób:
W ten sposób przekształca go w tablicę ze spacjami będącymi separatorami, a następnie łączy elementy w tablicy razem bez spacji.
Działa całkiem dobrze i jest łatwy do zrozumienia.
źródło
Są też inne znaki spacji, które również istnieją w ciągach. Więc znak spacji może być potrzebny do zastąpienia przez łańcuchy.
Np .: PRZESTRZEŃ BEZ PRZERW, PRZESTRZEŃ TRZECI NA EM, PRZESTRZEŃ PUNKTUACYJNA
Oto lista znaków spacji http://jkorpela.fi/chars/spaces.html
Musimy więc zmodyfikować
\ u2004 nas dla TRZECIEJ PRZESTRZEŃ EM
s.replaceAll („[[u0020 \ u2004]”, „”)
źródło
Białe znaki można usunąć za pomocą funkcji isWhitespace z klasy znaków.
źródło
Oddziel każdą grupę tekstu do własnego podłańcucha, a następnie połącz te podłańcuchy:
źródło
To może pomóc.
źródło
Możesz także rzucić okiem na poniższy kod Java. Poniższe kody nie używają żadnych „wbudowanych” metod.
Wejście:
Wynik:
źródło
źródło
Udzielono dość wielu odpowiedzi. Chciałbym podać rozwiązanie, które jest dość czytelne i lepsze niż regex.
źródło