使用正则表达式拆分字符会在java中返回一个空值

Anu*_*sha 1 java regex string

这是我的意见

.... ALPO..LAPOL.STRING

我想在每个字符串到达​​'时'分隔.并存储在字符串数组列表中.

我尝试使用以下代码,

  ArrayList<String> words = new ArrayList<>    (Arrays.asList(chars.stream().map(String::valueOf)
      .collect(Collectors.joining("")).split("\\.+")));
Run Code Online (Sandbox Code Playgroud)

正则表达式分割("\.+"))存在问题.

预期产量:

ALPO

LAPOL

实际输出:

"" - >空白

LAPOL

它将列表的第一个值打印为空值,因为有许多'.' 在'A'之前出现.如何摆脱字符串数组列表中的这个空值.任何帮助都会很高兴!

Wik*_*żew 5

出现空元素是因为分隔符在您需要获取的第一个值之前匹配.

您需要首先从字符串的开头删除分隔符符号.replaceFirst("^\\.+", ""),然后拆分:

String results[] = "....ALPO..LAPOL.STRING".replaceFirst("^\\.+", "").split("\\.+");
System.out.println(Arrays.toString(results));
Run Code Online (Sandbox Code Playgroud)

请参阅IDEONE演示

^\\.+模式匹配字符串(^)的开头,然后匹配1个或多个文字点(\\.+).replaceFirst因为预期只需要1次更换(不需要使用replaceAll).

有关Java中拆分的更多详细信息,请参阅文档:

public String[] split(String regex)
将此字符串拆分为给定正则表达式的匹配项. 此方法的工作方式就像调用split带有给定表达式和limit参数的双参数方法一样zero.因此,结尾的空字符串不包含在结果数组中.

但是,如果找到,将包括前导空元素.所以,我们首先需要在字符串开头摆脱那些分隔符.