Как разбить строку, разделенную запятой?

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

"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.

Ответ 1

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

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

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

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

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

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

Ответ 2

Ну, вы хотите раскол, правильно?

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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*");

Ответ 6

Для полноты, используя Guava, вы должны сделать: 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 для получения дополнительных параметров конфигурации.

Ответ 7

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

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

или еще

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

Ответ 8

Удалите все пробелы и создайте фиксированный или неизменный список (см. asList API docs)

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 answer до Удаление пробелов из строк в Java)

Ответ 9

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

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

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

Кроме того, вы должны включить libs:

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

Ответ 10

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

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

Ответ 11

В Котлине

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

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

Ответ 12

в 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);
    }

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

Ответ 13

Существует функция, называемая 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