Muszę podzielić ciąg znaków na separator -
i .
. Poniżej znajdują się moje pożądane wyniki.
AA.BB-CC-DD.zip
->
AA
BB
CC
DD
zip
ale mój poniższy kod nie działa.
private void getId(String pdfName){
String[]tokens = pdfName.split("-\\.");
}
AA
/BB
/CC
...)Odpowiedzi:
Myślę, że musisz dołączyć operator wyrażenia regularnego OR :
To, co masz, będzie pasować:
[DASH, a następnie DOT razem]
-.
nie
[DASH lub DOT żaden z nich]
-
lub.
źródło
.
Znaków w wyrażeniu regularnym oznacza dowolny znak inny niż nowej linii. tutorialspoint.com/java/java_regular_expressions.htm W tym przypadku jednak chcieli rzeczywistej postaci.
. Dwa odwrotne ukośniki oznaczają, że masz na myśli.
. Ukośnik odwrotny jest znakiem ucieczki..split("match1|match2")
(np.split("https|http")
), \\ jest uniknięcie specjalnego znaku.
w powyższym przypadkupdfName.split("\\W");
poniższej odpowiedzi[-.]
zamiast-|\\.
Spróbuj tego wyrażenia regularnego
"[-.]+"
. Znak + traktuje kolejne znaki separatora jako jeden. Usuń plus, jeśli nie chcesz tego.źródło
-
było to, że jest to pierwsza myśl w środku[]
, w przeciwnym razie musiałby wystąpić odwrotny ukośnik przed nim (i oczywiście, aby umieścić odwrotny ukośnik przed nim, my potrzeba dwóch, ponieważ jest to literał łańcuchowy).Możesz użyć wyrażenia regularnego „\ W”. Pasuje do dowolnego nie-wyrazowego znaku. Wymagany wiersz to:
źródło
\W
.Podany ciąg
split
jest formą wyrażenia regularnego, więc:Oznacza to podział na dowolną postać w
[]
(musimy uciec-
z odwrotnym ukośnikiem, ponieważ jest on wewnątrz wyjątkowy[]
; i oczywiście musimy uciec z odwrotnego ukośnika, ponieważ jest to ciąg znaków). (Przeciwnie,.
jest zwykle wyjątkowy, ale nie jest wyjątkowy w środku[]
).źródło
[-.]
nie można go interpretować jako zakresu.String[] strings = codes.get(x).split("\\[|\\]| ");
<- kod dla wszystkich zainteresowanychZa pomocą Guava możesz to zrobić:
źródło
W przypadku sekwencji dwóch znaków jako delimetrów „AND” i „OR” należy to zrobić. Nie zapomnij przyciąć podczas używania.
Wynik: miasta = {„ISTANBUŁ”, „NOWY JORK”, „PARYŻ”, „TOKIO”, „MOSKWA”}
źródło
Użyłbym Apache Commons:
import
org.apache.commons.lang3.StringUtils;
Dzieli się na jednym z określonych separatorów, w przeciwieństwie do tego,
StringUtils.splitByWholeSeparator(str, separator)
który używa pełnego łańcucha jako separatoraźródło
źródło
Lepiej użyć czegoś takiego:
Dodałem kilka innych znaków jako przykład. Jest to najbezpieczniejszy sposób użycia, ponieważ sposób
.
i sposób'
leczenia.źródło
Możesz również podać wyrażenie regularne jako argument w metodzie split () .. patrz poniższy przykład ....
źródło
Wypróbuj ten kod:
źródło
powinno działać.
źródło
Jeśli wiesz, że żądło będzie zawsze w tym samym formacie, najpierw podziel ciąg na podstawie
.
i zapisz ciąg przy pierwszym indeksie w zmiennej. Następnie podziel ciąg w drugim indeksie na podstawie-
i przechowuj indeksy 0, 1 i 2. Na koniec podziel indeks 2 z poprzedniej tablicy na podstawie.
i powinieneś uzyskać wszystkie odpowiednie pola.Zapoznaj się z następującym fragmentem kodu:
źródło
pdfName.split(".")
daje tablicę o zerowej długości..
Potrzebuje ucieczki jako\\.