it-swarm.com.ru

Как разделить запятую?

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

"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.
173
James Fazio

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

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

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

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

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

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

297
npinti

Ну, вы хотите разделить , верно?

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

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

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

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

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

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

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

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

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

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

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

19
Prappo Prince

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

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

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

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

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

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

Для полноты, используя библиотеку 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, поэтому, если вам нужен List, оберните его в Lists.newArrayList(), как указано выше. В противном случае просто перейдите с Iterable, например: 

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

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

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

3
Jonik

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

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

или еще 

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

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

0
sdc

В Котлине

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

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

0
KishanSolanki124

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

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

0
panayot_kulchev_bg

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

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

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

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;
0
Diego Cortes