使用正则表达式拆分字符在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解释得很好:如果此字符串的开头有正宽度匹配,则结果数组的开头将包含一个空的前导子字符串。但是,开头的零宽度匹配永远不会产生这样的空前导子字符串。”