Jak usunąć zduplikowane spacje (w tym tabulatory, znaki nowej linii, spacje itp.) W ciągu znaków za pomocą języka Java?
java
string
whitespace
bezmózgi
źródło
źródło
\s+
ale co oznacza 2 lewy ukośnik \\?"\\"
reprezentuje ciąg składający się z pojedynczego ukośnika odwrotnego. Aby reprezentować\s+
, piszesz"\\s+"
.Możesz użyć wyrażenia regularnego
i
zamień na
$1
.Kod Java:
Jeśli wejście to
"foo\t\tbar "
, otrzymasz"foo\tbar "
jako wyjście,ale jeśli wejście jest
"foo\t bar"
, pozostanie niezmienione, ponieważ nie ma żadnych kolejnych białych znaków.Jeśli potraktujesz wszystkie białe znaki (spacja, tabulator pionowy, tabulator poziomy, powrót karetki, wysuw strony, nowa linia) jako spację, możesz użyć następującego wyrażenia regularnego, aby zastąpić dowolną liczbę kolejnych białych znaków pojedynczą spacją:
Ale jeśli chcesz zamienić dwie kolejne białe spacje na jedną spację, powinieneś zrobić:
źródło
Spróbuj tego - musisz
import java.util.regex.*;
Gdzie
string
jest twój ciąg, na którym musisz usunąć zduplikowane białe spacjeźródło
cześć najszybszy (ale nie najpiękniejszy sposób), jaki znalazłem, to
to działa dość szybko na Androidzie w przeciwieństwie do wyrażenia regularnego
źródło
źródło
Chociaż jest już za późno, znalazłem lepsze rozwiązanie (które mi pasuje), które zastąpi wszystkie kolejne białe spacje tego samego typu jedną białą spacją tego samego typu. To jest:
będzie
Zauważ, że nadal istnieją początkowe i końcowe białe spacje. Więc moje kompletne rozwiązanie to:
W tym przypadku
trim()
zastępuje wszystkie początkowe i końcowe białe znaki znakiem „”.(\\s)
służy do przechwytywania\\s
(czyli białych spacji, takich jak „”, „\ n”, „\ t”) w grupie nr 1 .+
znak służy do dopasowania 1 lub więcej poprzedzających tokenów. A więc(\\s)+
mogą to być kolejne znaki (1 lub więcej) wśród pojedynczych białych znaków („”, „\ n” lub „\ t”).$1
służy do zastąpienia pasujących ciągów ciągiem z grupy nr 1 (który zawiera tylko 1 znak odstępu) pasującego typu (to jest pojedynczego znaku odstępu, który został dopasowany). Powyższe rozwiązanie zmieni się następująco:będzie
Nie znalazłem tutaj powyższego rozwiązania, więc je opublikowałem.
źródło
Jeśli chcesz pozbyć się wszystkich początkowych i końcowych, zbędnych białych znaków, powinieneś zrobić coś takiego:
Następnie możesz usunąć duplikaty, korzystając z innych strategii wymienionych tutaj:
źródło
Możesz także spróbować użyć String Tokeniser dla dowolnej spacji, tabulacji, nowej linii i wszystkich. Prosty sposób to
źródło
Można to zrobić w trzech krokach:
źródło