爪哇 - 一次拆分和修剪



我有一个这样的字符串: 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()});

最新更新