观众朋友们大家好,这里是小码看世界。
Java的String.split()方法相信大家都很不会很陌生,近日,中国一互联网码农小哥(其实是我)在使用Java String.split()方法时,遇到了一个神奇的问题,这究竟是怎么回事呢,我们一起来看一看吧~

这位小哥写了一个String转char[][]的方法,其中需要使用split方法来分割每个char[]与每个char[][]:

public static char[][] create2DCharArray(String arrayContent, String itemSplit, String lineSplit) {
    String newArrayContent = arrayContent.trim();
 String[] rows = newArrayContent.split(lineSplit);
 if (rows.length > 0) {
        String[] items = rows[0].split(itemSplit);
 char[][] result = new char[rows.length][items.length];
 for (int i = 0; i < items.length; i++) {
            result[0][i] = items[i].charAt(0);
 }
        for (int i = 1, lengthI = rows.length; i < lengthI; i++) {
            items = rows[i].split(itemSplit);
 for (int j = 0, lengthJ = items.length; j < lengthJ; j++) {
                result[i][j] = items[j].charAt(0);
 }
        }
        return result;
 } else {
        return new char[][]{};
 }
}

只见这位小哥在使用该方法的时候是这样传参的,他计划使用"|"来区分每个一维数组元素,用","来区分每个二位数组元素:

public static void main(String[] args) {
    char[][] matrix = CreateTools.create2DCharArray("1,0,1,0,0|1,0,1,1,1|1,1,1,1,1|1,0,0,1,0", ",", "|");
 PrintTools.print(matrix);
}

但是输出的结果却令他感到非常惊讶,本应该生成的二维数组的每个元素竟然是给定的字符串"1,0,1,0,0|1,0,1,1,1|1,1,1,1,1|1,0,0,1,0"中的每个字符!:
image.png
于是小哥网上查找了一下split方法所需要注意的问题,按照这篇文章所说https://blog.csdn.net/cccmercy/article/details/79058686

  1. Java中,按某个字符分割字符串使用的是String对象的split()方法,返回的是分割之后的String数组,值得注意的是分割符。当分割符是 . 或者是 | 时,必须使用 \\ 进行转义。
  2. 没有加转义符按 . 分割字符串,返回值是一个空的长度为0的String数组
  3. 没有加转义符按 | 分割字符串,返回值是一个长度为原字符串长度的String数组,它会截取字符串中每一个字符并放到String数组中

小哥,根据文章中的方法进行了修改,果然获取到的想要的格式:

    public static void main(String[] args) {
        char[][] matrix = CreateTools.create2DCharArray("1,0,1,0,0|1,0,1,1,1|1,1,1,1,1|1,0,0,1,0", ",", "\\|");
        PrintTools.print(matrix);
    }

image.png

好了,以上就是小码看世界的全部内容了,如果喜欢的话就点个关注,有什么想与小码交流的,请在评论区留言。我们下期再见~

哈哈哈哈哈哈哈哈哈哈,我编不下去了


御龙镜中潜
62 声望4 粉丝

The more I have learnt, the more I need to learn.