Diese Frage ist zwar alt und wurde schon mehrfach beantwortet, aber keine der Antworten ist in der Lage, alle der folgenden Fälle zu bewältigen:
""
-> leere Zeichenkette sollte auf leere Liste abgebildet werden
" a, b , c "
-> alle Elemente sollten abgeschnitten werden, einschließlich des ersten und letzten Elements
",,"
-> leere Elemente sollten entfernt werden
Daher verwende ich den folgenden Code (mit org.apache.commons.lang3.StringUtils
z.B. https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.11 ):
StringUtils.isBlank(commaSeparatedEmailList) ?
Collections.emptyList() :
Stream.of(StringUtils.split(commaSeparatedEmailList, ','))
.map(String::trim)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
Die Verwendung eines einfachen Split-Ausdrucks hat einen Vorteil: Es wird kein regulärer Ausdruck verwendet, so dass die Leistung wahrscheinlich höher ist. Die commons-lang3
Bibliothek ist leichtgewichtig und sehr verbreitet.
Beachten Sie, dass die Implementierung davon ausgeht, dass Sie kein Listenelement haben, das ein Komma enthält (d.h. "a, 'b,c', d"
wird geparst als ["a", "'b", "c'", "d"]
nicht zu ["a", "b,c", "d"]
).