Mam ciąg o nieznanej długości, który wygląda mniej więcej tak
"dog, cat, bear, elephant, ..., giraffe"
Jaki byłby optymalny sposób podziału tego ciągu na przecinki, aby każde słowo mogło stać się elementem ArrayList?
Na przykład
List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.
Odpowiedzi:
Możesz to zrobić:
Zasadniczo
.split()
metoda podzieli ciąg zgodnie z (w tym przypadku) ogranicznikiem, który przekazujesz i zwróci tablicę ciągów.Wygląda jednak na to, że szukasz listy ciągów, a nie tablicy, więc tablica musi zostać przekształcona w listę za pomocą
Arrays.asList()
narzędzia. Jako FYI możesz również zrobić coś takiego:Ale zwykle lepszą praktyką jest programowanie do interfejsu niż do konkretnej konkretnej implementacji, dlatego poleciłbym pierwszą opcję.
źródło
str.split
akceptuje wyrażenia regularne, dzięki czemu możesz użyć,str.split(",[ ]*");
aby usunąć przecinki i spacje po przecinkach.ArrayList<String>
.Chcesz się podzielić , prawda?
Jeśli chcesz dodatkowo pozbyć się białych znaków wokół przedmiotów:
źródło
Arrays.asList()
idiomu.Możesz go podzielić i utworzyć tablicę, a następnie uzyskać dostęp jak tablica
masz dostęp jak
lub za pomocą pętli
mam nadzieję, że ci to pomoże.
źródło
Mała poprawka: powyższe rozwiązania nie usuwają spacji wiodących ani końcowych w rzeczywistym łańcuchu. Lepiej zadzwonić do przycinania przed wywołaniem split. Zamiast tego,
posługiwać się
źródło
("\\s*,\\s*")
tylko użycie(",");
tego spowoduje takie same wyniki.trim(" string, with , space ")
będzie"string, with , space"
."dog, cat, bear, elephant, giraffe"
nie ma potrzeby,trim()
a jeśli tak, to jeśli użyjesz, wypakuj nietrim()
będzie"string,with,space"
to"string, with , space"
trim()
usunie wszystkie spacje, nie tylko lewą i prawą spację ciągu" string, with , space ".trim()
zwraca"string, with , space"
. Jak mówi javadoc: zwraca kopię łańcucha, z pominiętą początkową i końcową spacją. Mylisz się, a @ user872858 ma rację.Najpierw możesz podzielić takie nazwy
uzyskać dostęp do swoich zwierząt
A także chcesz usunąć białe spacje i przecinki wokół nazw zwierząt
źródło
Aby uzyskać kompletność, użyj Guawy biblioteki , możesz:
Splitter.on(",").split(“dog,cat,fox”)
Inny przykład:
Splitter.split()
zwraca Iterable, więc jeśli potrzebujesz Listy, zawiń jąLists.newArrayList()
jak wyżej. W przeciwnym razie wybierz Iterable, na przykład:Zwróć uwagę, jak
trimResults()
radzi sobie ze wszystkimi potrzebami przycinania, bez konieczności modyfikowania wyrażeń regularnych dla przypadków narożnych , jak w przypadkuString.split()
.Jeśli twój projekt korzysta już z Guawy, powinno to być twoje preferowane rozwiązanie. Zobacz dokumentację Splittera w Guava User Guide lub javadocs, aby uzyskać więcej opcji konfiguracji.
źródło
Może spróbować z tym działało dla mnie
albo
źródło
w build.gradle dodaj Guava
i wtedy
cieszyć się :)
źródło
Usuń wszystkie białe spacje i utwórz listę o stałym rozmiarze lub niezmienną (patrz
asList
dokumentacja API )Możliwe jest również użycie,
replaceAll(\\s+", "")
ale maksymalna wydajność zależy od przypadku użycia. (patrz odpowiedź @GurselKoca na Usuwanie białych znaków z ciągów znaków w Javie )źródło
Możesz użyć czegoś takiego:
Uwzględnij również biblioteki lib:
źródło
Użyj tego :
źródło
W Kotlinie
gdzie
stringArray
jestList<String>
icommasString
jestString
z przecinkami i spacjamiźródło
Jest to łatwy sposób na rozdzielenie ciągu przecinkami,
źródło
Istnieje funkcja o nazwie,
replaceAll()
która może usunąć wszystkie białe znaki, zastępując je dowolną wartością. Jako przykładda tobie:
źródło