我有一个这样的字符串: String attributes = " foo boo, faa baa, fii bii,"
我想得到这样的结果:
String[] result = {"foo boo", "faa baa", "fii bii"};
所以我的问题是如何在我已经拆分的一次镜头中进行拆分和修剪:
String[] result = attributes.split(",");
但spaces
仍然在结果中:
String[] result = {" foo boo", " faa baa", " fii bii"};
^ ^ ^
我知道我们可以做一个循环,为每个人制作trim
,但我想在镜头中做到这一点。
使用正则表达式s*,s*
进行拆分。
String result[] = attributes.split("\s*,\s*");
对于初始空格和尾随空格
以前的解决方案仍然留下初始和尾随空格。因此,如果我们期待其中任何一个,那么我们可以使用以下解决方案来删除相同的内容:
String result[] = attributes.trim().split("\s*,\s*");
使用 java 8,您可以在一行中做到这一点
String[] result = Arrays.stream(attributes.split(",")).map(String::trim).toArray(String[]::new);
如果逗号之间没有文本,则以下表达式不会创建空元素:
String result[] = attributes.trim().split("\s*,+\s*,*\s*");
用谷歌番石榴库这样做:
List<String> results = Splitter.on(",").trimResults().splitToList(attributes);
我觉得这很优雅,因为代码在您阅读它时非常明确
ApaceCommons StringUtils.stripAll 函数可用于修剪数组的各个元素。如果某些数组元素为空,则它将空值保留为空值。
这里
String[] array = StringUtils.stripAll(attributes.split(","));
创建自己的自定义函数
private static String[] split_and_trim_in_one_shot(String string){
String[] result = string.split(",");
int array_length = result.length;
for(int i =0; i < array_length ; i++){
result[i]=result[i].trim();
}
return result;
考虑自定义分隔符的重载
private static String[] split_and_trim_in_one_shot(String string, String delimiter){
String[] result = string.split(delimiter);
int array_length = result.length;
for(int i =0; i < array_length ; i++){
result[i]=result[i].trim();
}
return result;
与流
public static List<String> split(String str){
return Stream.of(str.split(","))
.map(String::trim)
.map (elem -> new String(elem))//optional
.collect(Collectors.toList());
用逗号和空格拆分怎么样:
String result[] = attributes.split(",\s");
String result[] = attributes.trim().split("\s*,[,\s]*");
以前发布在这里: https://blog.oio.de/2012/08/23/split-comma-separated-strings-in-java/
// given input
String attributes = " foo boo, faa baa, fii bii,";
// desired output
String[] result = {"foo boo", "faa baa", "fii bii"};
这应该有效:
String[] s = attributes.trim().split("[,]");
正如@Raman Sahasi回答的那样:
在拆分字符串之前,可以修剪尾随空格和前导空格。我使用了分隔符
,
因为它是字符串中唯一的分隔符
最好的方法是:
value.split(",").map(function(x) {return x.trim()});