Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 - Fatal编程技术网

一个与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]
    }
}