我有一个长度未知的字符串,看起来像这样
"dog, cat, bear, elephant, ..., giraffe"
用逗号分隔这个字符串的最佳方法是什么,这样每个单词都可以成为数组列表的一个元素?
例如
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.
你可以这样做:
String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));
基本上,.split()方法将根据您传递的分隔符(在本例中)分割字符串,并返回一个字符串数组。
但是,您似乎是在寻找字符串列表而不是数组,因此必须使用Arrays.asList()实用程序将数组转换为列表。仅供参考,你也可以这样做:
String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.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*");
为了完整起见,使用Guava库,您可以这样做:split .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]
split .split()返回一个Iterable,所以如果你需要一个List,就像上面那样把它包装在Lists.newArrayList()中。否则就使用Iterable,例如:
for (String animal : Splitter.on(",").trimResults().split(animals)) {
// ...
}
请注意trimResults()是如何处理所有修剪需求的,而不必像String.split()那样为角落的情况调整正则表达式。
如果您的项目已经使用了Guava,这应该是您的首选解决方案。更多配置选项,请参阅Guava用户指南或javadocs中的Splitter文档。
删除所有空白,并创建一个固定大小或不可变的列表(参见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回答从Java字符串中删除空白)
在构建。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);
}
享受:)
“老式”(JDK1.0) java。StringTokenizer类:
StringTokenizer(String str, String delim)
import java.util.*;
public class Tokenizer {
public static void main(String[] args) {
String str = "dog, cat, bear, elephant, ..., giraffe";
StringTokenizer tokenizer = new StringTokenizer(str, ",");
List<String> strings = new ArrayList<String>();
while (tokenizer.hasMoreTokens()) {
// if need to trim spaces .trim() or use delim like ", "
String token = tokenizer.nextToken().trim();
strings.add(token);
}
// test output
strings.forEach(System.out::println);
}
}
注:
StringTokenizer是出于兼容性考虑而保留的遗留类,尽管不鼓励在新代码中使用它。建议寻求此功能的人使用String的split方法或java.util.regex包。
例子:
import java.util.regex.*;
...
// Recommended method<?>
Pattern commaPattern = Pattern.compile("\\s*,\\s*");
String[] words = commaPattern.split(str);
List<String> wordList = new ArrayList<String>(Arrays.asList(words));
// test output
wordList.forEach(System.out::println);
...