Как разбить строку через запятую?

У меня есть строка с неизвестной длиной, которая выглядит примерно так

"dog, cat, bear, elephant, ..., giraffe"

Каков оптимальный способ разделения этой строки через запятую, чтобы каждое слово могло стать элементом ArrayList?

Например

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.
 Simon Dorociak17 мая 2012 г., 09:46
используйте метод split («разделяющий символ»), он разделяет ваш метод строки и создаст массив строк с разделенными словами.

Ответы на вопрос(13)

val stringArray = commasString.replace(", ", ",").split(",")

гдеstringArray являетсяList<String> а такжеcommasString являетсяString с запятыми и пробелами

Для полноты, используягуайява библиотека, вы делаете:Splitter.on(",").split(“dog,cat,fox”)

Другой пример:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split() возвращает Iterable, поэтому, если вам нужен список, поместите его вLists.newArrayList() как указано выше. В противном случае просто используйте Iterable, например:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

Обратите внимание, какtrimResults() обрабатывает все ваши потребности обрезки без необходимостинастроить регулярные выражения для угловых случаевкак сString.split().

Если ваш проект уже использует Guava, это должно быть вашим предпочтительным решением. См. Документацию Splitter вGuava Руководство пользователя илиJavadocs для больше вариантов конфигурации.

в build.gradle добавить гуаву

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

а потом

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

наслаждаться :)

Может попробовать с этим сработало у меня

 sg = sg.replaceAll(", $", "");

или еще

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

Использовать этот :

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));

Сначала вы можете разделить имена, как это

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

Доступ к вашим животным

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

А также вы хотите удалить пробелы и запятую вокруг имен животных

String animals_list[] = animals.split("\\s*,\\s*");

Вы можете разделить его и сделать массив, а затем получить доступ как массив

String names = "prappo,prince";
String[] namesList = names.split(",");

вы можете получить доступ как

String name1 = namesList [0];
String name2 = namesList [1];

или с помощью цикла

for(String name : namesList){
System.out.println(name);
}

надеюсь, это поможет вам.

Небольшое улучшение: вышеприведенные решения не будут удалять начальные или конечные пробелы в фактической строке. Лучше вызывать trim перед вызовом split. Вместо этого,

 String[] animalsArray = animals.split("\\s*,\\s*");

использование

 St,ring[] animalsArray = animals.trim().split("\\s*,\\s*");
 13 мая 2015 г., 10:39
trim() удалит все пробелы, а не только левый и правый пробел строки
 13 мая 2015 г., 10:08
Я не уверен в этом @WIZARD, потому что обрезка удаляет только левый и правый пробел строки, но не пробел в ней. Итакtrim(" string, with , space ") будет"string, with , space".
 13 мая 2015 г., 10:34
@ThomasLeduc, если строка такая"dog, cat, bear, elephant, giraffe" тогда не нужноtrim() и в случае, если вы используетеtrim() тогда выход будет"string,with,space" не это"string, with , space"
 10 янв. 2015 г., 06:13
для вашей второй строки, если мы используем trim (), нам не нужно разделение пробела, как("\\s*,\\s*") просто используйте(","); это приведет к тому же.
 13 мая 2015 г., 10:55
Вы проверяете это? потому что я только что написал программу Java и строку" string, with , space ".trim() вернуть"string, with , space", Как говорит javadoc: возвращает копию строки, пропуская начальные и конечные пробелы. Вы не правы, а @ user872858 прав.

Удалите все пробелы и создайтеfixed-size или жеimmutable Список (см.asList API документы)

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

Можно также использоватьreplaceAll(\\s+", "") но максимальная эффективность зависит от варианта использования. (см. @GurselKocaответ вRemoving whitespace from strings in Java)

Вы можете использовать что-то вроде этого:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

Также вы можете включить библиотеки:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;

Есть функция под названиемreplaceAll() это может удалить все пробелы, заменив их тем, что вы хотите. В качестве примера

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

дам тебе:

First:15.94, Second:16.01
Решение Вопроса

Вы могли бы сделать это:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

В основном.split() Метод разделит строку в соответствии с (в данном случае) разделителем, который вы передаете, и вернет массив строк.

Тем не менее, вы, кажется, следует после списка строк, а не массива, поэтому массив должен быть превращен в список с помощьюArrays.asList() полезность. Так же, как к вашему сведению, вы можете сделать что-то вроде этого:

String str = "...";
ArrayList<String> elephantList = (ArrayList<String>)Arrays.asList(str.split(","));

Но обычно лучше программировать на интерфейс, а не на конкретную реализацию, поэтому я рекомендую первый вариант.

 28 авг. 2014 г., 11:57
Второй вариант требует приведения кArrayList<String>.
 28 июн. 2013 г., 17:33
Имейте в виду, что это не урезает значения, поэтому strings.get (1) будет иметь & quot; кошка & Quot; не "кошка"
 31 окт. 2013 г., 09:38
str.split принимает регулярные выражения, чтобы вы могли использоватьstr.split(",[ ]*"); поэтому вы удаляете запятые и пробелы после запятых.
 16 июл. 2015 г., 04:16
Если вам нужно сохранить пустые записи (например, для постоянной длины массива), используйте split (& quot;, & quot;, - 1) согласноstackoverflow.com/questions/14602062/…
 08 мар. 2014 г., 03:35
Файл с разделителями-запятыми (csv) может иметь запятую в кавычках, что означает, что он не является разделителем. В этом случае Split не будет работать.

Ну хочешьsplit, право?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

Если вы хотите дополнительно избавиться от пробелов вокруг предметов:

String[] animalsArray = animals.split("\\s*,\\s*");
 17 мая 2012 г., 09:46
Да, это часть решения. OP, кажется, следует за списком строк, а не массивом.
 05 июл. 2013 г., 18:44
+1 большое замечание по поводу удаления пробелов.
 17 мая 2012 г., 09:47
@npinti: да, +1 тебе, ты был быстрее, а я не хотел копировать твоиArrays.asList() идиома.
 12 дек. 2015 г., 03:55
Я продолжал думать в течение 10 часов, затем искал ТАК. не знал, что это так легко .split ();
 11 мар. 2018 г., 17:08
Что делать, если вы хотите сохранить полученные элементы разбиения в наборе, а не в массиве?

Ваш ответ на вопрос