Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
使用正则表达式拆分字符在java中返回空值_Java_Regex_String - Fatal编程技术网

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

使用正则表达式拆分字符在java中返回空值,java,regex,string,Java,Regex,String,这是我的意见 …阿尔波..拉波尔.弦 我想在每个字符串到达“.”时将其分开,并存储在字符串数组列表中 我试着使用下面的代码 ArrayList<String> words = new ArrayList<> (Arrays.asList(chars.stream().map(String::valueOf) .collect(Collectors.joining("")).split("\\.+"))); ArrayList words=new A

这是我的意见

…阿尔波..拉波尔.弦

我想在每个字符串到达“.”时将其分开,并存储在字符串数组列表中

我试着使用下面的代码

  ArrayList<String> words = new ArrayList<>    (Arrays.asList(chars.stream().map(String::valueOf)
      .collect(Collectors.joining("")).split("\\.+")));
ArrayList words=new ArrayList(Arrays.asList(chars.stream().map)(String::valueOf)
.collect(收集器.连接(“”).split(“\.+”);
regex拆分(\.+)有问题

预期输出:

阿尔波

拉波尔

实际输出:

“”->空白

拉波尔


它将列表的第一个值打印为空值,因为在“A”之前有许多“.”。如何在字符串数组列表中消除此空值。如果有任何帮助,都会很高兴!!

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

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

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

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

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

公共字符串[]拆分(字符串正则表达式)

围绕给定正则表达式的匹配项拆分此字符串。 此方法的工作原理类似于调用具有给定表达式的双参数
split
方法和
零的限制参数
因此结果数组中不包括尾随空字符串


但是,如果找到前导的空元素,则会包含这些元素。因此,我们首先需要在字符串开头去掉这些分隔符。

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

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

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

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

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

公共字符串[]拆分(字符串正则表达式)

围绕给定正则表达式的匹配项拆分此字符串。 此方法的工作原理类似于调用具有给定表达式的双参数
split
方法和
零的限制参数
因此结果数组中不包括尾随空字符串


但是,如果找到,前导的空元素将被包括在内。因此,我们首先需要在字符串开始处去掉这些分隔符。

您的意思是说您拆分了
…ALPO..LAPOL.string
字符串吗?是的,您可以将该输入作为字符串或字符数组列表。我将其作为字符数组列表,因此code@WiktorStribiżewDo你的意思是说你拆分了
…ALPO..LAPOL.STRING
STRING?是的,你可以将该输入作为字符串或字符数组列表。我将其作为字符数组列表,因此code@WiktorStribiżewIt工作起来很有魅力..!!你能解释一下拆分的内容吗(\\.+);regex有吗?@WiktorStribiżewt这实际上是您的regex。它只匹配1个或多个文字点(句点)。@Anusha解释得很好:“当此字符串开头有正宽度匹配时,则结果数组的开头包含一个空的前导子字符串。然而,一开始的零宽度匹配永远不会产生这样的空前导子字符串。“它的工作原理就像charm..!!你能解释一下拆分(\\.+);正则表达式的作用吗?@WiktorStribiżew它实际上是你的正则表达式。它只匹配一个或多个文字点(句点)。@Anusha the解释得很好:如果此字符串的开头有正宽度匹配,则结果数组的开头将包含一个空的前导子字符串。但是,开头的零宽度匹配永远不会产生这样的空前导子字符串。”