2012-05-17 2 views
145

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

"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

метод использования split ("splitting char"), он разбивает ваш метод string nad, создавая строковый массив с разделенными словами. – Sajmon

ответ

237

Вы можете сделать это:

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

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

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

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

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

+0

@JamesFazio: Метод '.split' является одним из самых полезных методов в классе String, я бы порекомендовал вам проверить ссылку на JavaDocs, включенную в мой ответ;). – npinti

+0

Спасибо за очень тщательный ответ! –

+9

Помните, что это не будет обрезать значения, так что strings.get (1) будет «cat» not «cat» – Alb

124

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

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

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

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

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

Да, это часть решения. Кажется, что OP находится после списка строк, а не массива. – npinti

+0

@npinti: yep, +1 к вам, вы были быстрее, и я не хотел копировать вашу 'Arrays.asList()' идиому. –

+8

+1 отличный пункт об удалении пробелов. – HDave

17

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

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

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

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

для второй строки ur, если мы используем trim(), тогда нам не нужно разбить пространство как '(" \\ s *, \\ s * ")' just use '(", "); , –

+4

Я не уверен в этом @WIZARD, потому что trim удаляет только левое и правое пространство строки, но не пространство в нем. Поэтому строка 'trim (" string, with, space ")' будет '' ', с пробелом' '. –

+0

@ThomasLeduc, если строка подобна этой «собаке, кошке, медведю, слону, жирафу», тогда нет необходимости в 'trim()' и в случае ur, если используется 'trim()' then out put будет '' string, с, пробел "' не эта '" строка, с пробелом "' –

3

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

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

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

Для полноты, используя 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() обрабатывает все ваши потребности обрезки без tweak regexes for corner cases, как и с String.split().

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

12

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

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

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

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

или с помощью петли

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

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

0

Удалить все пробелы и создать фиксированного размера или непреложный Список (см asListAPI 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)

0

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

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; 
2

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

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

или еще

if (sg.endsWith(",")) { 
        sg = sg.substring(0, sg.length() - 1); 
       } 
Смежные вопросы