Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将StringBuilder拆分为数组Java后删除空字符串_Java_Arrays_String_Split - Fatal编程技术网

将StringBuilder拆分为数组Java后删除空字符串

将StringBuilder拆分为数组Java后删除空字符串,java,arrays,string,split,Java,Arrays,String,Split,抱歉,如果已经问过这个问题,我只能找到c#的结果。 我有一个StringBuilder: StringBuilder sb = new StringBuilder(" 111 11 "); 我想使用以下方法将其拆分为一个数组: String[] ar = sb.toString().split(" "); 正如预期的那样,结果数组有一些空条目。我的问题是,在拆分StringBuilder时,我是否可以直接删除这些空格,或者在拆分之后必须删除这些空格。拆分需要一个正则表达式。因此:

抱歉,如果已经问过这个问题,我只能找到c#的结果。 我有一个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+”)
@Eugene
String.split()
似乎会自动删除后面的空条目。但不是领先者。这一直是一种挑剔的方法。“我倾向于吃番石榴酱。”RobbyCornelissen ha,你用我给出的答案更新了评论。我同意,我喜欢这个类。我可以用这个方法将拆分的字符串存储在数组中吗?@PetarYakov你可以将其存储到
列表中:
拆分器。在(Pattern.compile(\\s+))上。省略EmptyStrings().splitToList(t)从这里到数组很简单。。。