将StringBuilder拆分为数组Java后删除空字符串
抱歉,如果已经问过这个问题,我只能找到c#的结果。 我有一个StringBuilder:将StringBuilder拆分为数组Java后删除空字符串,java,arrays,string,split,Java,Arrays,String,Split,抱歉,如果已经问过这个问题,我只能找到c#的结果。 我有一个StringBuilder: StringBuilder sb = new StringBuilder(" 111 11 "); 我想使用以下方法将其拆分为一个数组: String[] ar = sb.toString().split(" "); 正如预期的那样,结果数组有一些空条目。我的问题是,在拆分StringBuilder时,我是否可以直接删除这些空格,或者在拆分之后必须删除这些空格。拆分需要一个正则表达式。因此:
StringBuilder sb = new StringBuilder(" 111 11 ");
我想使用以下方法将其拆分为一个数组:
String[] ar = sb.toString().split(" ");
正如预期的那样,结果数组有一些空条目。我的问题是,在拆分StringBuilder时,我是否可以直接删除这些空格,或者在拆分之后必须删除这些空格。拆分需要一个正则表达式。因此:
String[] ar = sb.toString().split("\\s+");
字符串\\s
是“任意空白”的regexp-ese,+是:1或更多。如果只希望拆分空格(而不希望拆分换行符、制表符等),请尝试:String[]ar=sb.toString().split(“+”)代码>字面意思是:“在一个或多个空格上拆分”
这个技巧适用于几乎任何分隔符。例如,在逗号上拆分?请尝试:.split(“\\s*,\\s*”)
,即:0个或多个空格,一个逗号,后跟0个或多个空格(正则表达式尽可能多地使用)
请注意,这个技巧并没有消除前导和尾随空格。但要做到这一点,请使用修剪。总而言之:
String[] ar = sb.toString().trim().split("\\s+");
对于逗号:
String[] ar = sb.toString().trim().split("\\s*,\\s*");
我会使用番石榴
来:
String t = " 111 11 ";
Splitter.on(Pattern.compile("\\s+"))
.omitEmptyStrings()
.split(t)
.forEach(System.out::println);
您可以使用Apache Commons中的交钥匙解决方案。
以下是一个例子:
StringBuilder sb = new StringBuilder(" 111 11 ");
String trimmedString = StringUtils.normalizeSpace(sb.toString());
String[] trimmedAr = trimmedString.split(" ");
System.out.println(Arrays.toString(trimmedAr));
输出:[111,11]
有几个正则表达式可以处理它,我也更喜欢@rzwitserloot方法,
但是如果你想看更多的话
请在此处查看:
他解释说:
在大多数regex方言中,都有一套方便的字符摘要,你可以用来做这类事情——这些都是值得记住的:
\w-匹配任何单词字符
\W-匹配任何非单词字符
\s-匹配任何空白字符
\S-匹配除空格字符以外的任何字符
\d-匹配任何数字
\D-匹配除数字以外的任何内容
搜索“Regex备忘单”会给你一大堆有用的总结
感谢如果您不想依赖任何第三方依赖项,也不想使用正则表达式筛选
您可以使用Java 8 Streams API在一行中完成此操作:
Arrays.stream(sb.toString().trim().split(" ")).filter(s-> !s.equals("")).map(s -> s.trim()).toArray();
有关上一版本的详细多行版本,请执行以下操作:
Arrays.stream(sb.toString()
.trim() // Trim the starting and ending whitespaces from string
.split(" ")) // Split the regarding to spaces
.filter(s-> !s.equals("")) // Filter the non-empty elements from the stream
.map(s -> s.trim()) // Trim the starting and ending whitespaces from element
.toArray(); // Collect the elements to object array
以下是演示的工作代码:
StringBuilder sb = new StringBuilder(" 111 11 ");
Object[] array = Arrays.stream(sb.toString().trim().split(" ")).filter(s-> !s.equals("")).map(s -> s.trim()).toArray();
System.out.println("(" + array[0] + ")");
System.out.println("(" + array[1] + ")");
这也是我要建议的,但这会消除开头和结尾的空条目吗?@RobbyCornelissen不,它不会使用sb.toString().trim().split(\\s+”)
@EugeneString.split()
似乎会自动删除后面的空条目。但不是领先者。这一直是一种挑剔的方法。“我倾向于吃番石榴酱。”RobbyCornelissen ha,你用我给出的答案更新了评论。我同意,我喜欢这个类。我可以用这个方法将拆分的字符串存储在数组中吗?@PetarYakov你可以将其存储到列表中:拆分器。在(Pattern.compile(\\s+))上。省略EmptyStrings().splitToList(t)代码>从这里到数组很简单。。。