一个与Java字符串拆分相关的问题
我发现字符串拆分的以下行为非常令人不快:一个与Java字符串拆分相关的问题,java,Java,我发现字符串拆分的以下行为非常令人不快: String[] parts = "0..".split("\\."); 这将导致零件仅包含“0”;但是,如果输入从“0..”更改为“.0” 这将导致零件包含“”和“0”。 有人能解释一下为什么split会这样做吗?这个方法是如何实现的 引用Java文档: 该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串 这意味着只有当至少有一个非空字符串继承空字符串时,才包括这些空字符串 import j
String[] parts = "0..".split("\\.");
这将导致零件仅包含“0”;但是,如果输入从“0..”更改为“.0”
这将导致零件包含“”和“0”。
有人能解释一下为什么split会这样做吗?这个方法是如何实现的 引用Java文档:
该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串
这意味着只有当至少有一个非空字符串继承空字符串时,才包括这些空字符串
import java.util.Arrays;
public class StringQ{
public static void main(String args[]){
String first = "0..";
System.out.println(Arrays.asList(first.split("\\.")));
// [0]
String second = "..0";
System.out.println(Arrays.asList(second.split("\\.")));
// [, , 0]
String third = "...0..0...";
System.out.println(Arrays.asList(third.split("\\.")));
// [, , , 0, , 0]
}
}
阅读文档,即的javadoc,以获得完整的解释。更大的问题是为什么
.0.
中的第一个点(确实生成空匹配)与最后一个点(不生成空匹配)的处理方式不同。但是,你实际上并没有问这个问题。@TimBiegeleisen为什么这是一个更大的问题?前导的
、尾随的
和任何连续的
会导致空值,尾随的空值会被消除。其实很简单<代码>拆分(“…A.B..C..”,-1)变成<代码>[,,,“A”,“B”,“,,,,,,,,,,,,][/code>,所以<代码>拆分(…A.B..C..”)变成<代码>[,,,“A”,“B”,“,,,,,,,,,,,,,,,,,,,,,,,,,][/code>,这回答了你的问题吗?请编辑您的问题,将输入与实际输出结合起来,好吗?
import java.util.Arrays;
public class StringQ{
public static void main(String args[]){
String first = "0..";
System.out.println(Arrays.asList(first.split("\\.")));
// [0]
String second = "..0";
System.out.println(Arrays.asList(second.split("\\.")));
// [, , 0]
String third = "...0..0...";
System.out.println(Arrays.asList(third.split("\\.")));
// [, , , 0, , 0]
}
}