Как разбить строку, разделенную запятой?
У меня есть строка с неизвестной длиной, которая выглядит примерно так:
"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