用“],[”分割字符串

时间:2018-07-09 03:37:03

标签: regex string split

我知道一个反斜杠<PropertyGroup> <DisableFastUpToDateCheck>True</DisableFastUpToDateCheck> </PropertyGroup> 可用于转义某些特殊字符,例如/(,而双反斜杠.可用于转义特殊字符直接输入一个字符串。

我想分开:

//

通过"[[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0],[1,1,0,1,1],[0,0,0,0,0]]"在每个子数组之间。

如果我想通过将所有子数组先拆分为],[来获取所有子数组,该怎么办。 如果您对如何将它们直接转换为包括"[[0,0,1,0,0", "0,0,0,0,0","0,0,0,1,0","1,1,0,1,1", "0,0,0,0,0]]"这样的数字的子数组有更好的想法,那会更好。

3 个答案:

答案 0 :(得分:4)

由于[中的]regex都使用特殊字符,因此您需要对其进行转义。

您可以尝试以下操作:

str.split("\\],\\[");

测试代码:

String str="[[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0],[1,1,0,1,1],[0,0,0,0,0]]";
String[] strs = str.split("\\],\\[");
for(String s:strs){
    System.out.println(s);
}

输出结果:

[[0,0,1,0,0
0,0,0,0,0
0,0,0,1,0
1,1,0,1,1
0,0,0,0,0]]

如果要删除重复的[[]],只需在拆分前添加以下代码即可:

str = str.substring(2);
str = str.substring(0, str.length()-2);

更新后的答案,如果要用regex消除中间和两端的所有括号,则编写\[?\[((\d,)+\d)之类的正则表达式,然后获取每个匹配记录数据的第一组,下面是代码:

String str = "[[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0],[1,1,0,1,1],[0,0,0,0,0]]";
String regex = "\\[?\\[((\\d,)+\\d)";
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(str);
while (m.find()) {
    System.out.println(m.group(1));
}

输出为

0,0,1,0,0
0,0,0,0,0
0,0,0,1,0
1,1,0,1,1
0,0,0,0,0

答案 1 :(得分:1)

您输入的内容是有效的JSON,因此建议您使用JSON解析器。

代码如下:

import javax.json.*;

JsonReader jsonReader = Json.createReader(new StringReader("[[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0],[1,1,0,1,1],[0,0,0,0,0]]"));
JsonArray array = jsonReader.readArray();
jsonReader.close();
System.out.println("Array #2: " + array.getJsonArray(1)); // should give [0,0,0,0,0]
System.out.println("Array #3, 4th value: " + array.getJsonArray(2).getInt(3)); // should give 1

答案 2 :(得分:-1)

如果您想将String转换为2d-Array,则可以使用以下函数,这些函数采用String并返回2d-Arrayint

private static int[][] getMatrixFromString(String arrayStrinng) {
    String arrayString = arrayStrinng.substring(1, arrayStrinng.length() - 1);

    String[] splitMajor = arrayString.split("],");
    int rowCount = splitMajor.length, colCount = 0;
    int[][] matrix = new int[rowCount][];


    for (int row = 0; row < splitMajor.length; row++) {
        String[] splitMinor = splitMajor[row].split(",");
        if (colCount == 0) {
            colCount = splitMinor.length;
            matrix = new int[rowCount][colCount];
        }
        for (int i = 0; i < colCount; i++) {
            if (splitMinor[i].startsWith("["))
                splitMinor[i] = splitMinor[i].substring(1);
            if (splitMinor[i].endsWith("]"))
                splitMinor[i] = splitMinor[i].substring(0, splitMinor[i].length() - 1);

            matrix[row][i] = Integer.parseInt(splitMinor[i]);
        }
    }

    return matrix;
}