Java 使用String.split()在二维数组中循环

Java 使用String.split()在二维数组中循环,java,arrays,loops,Java,Arrays,Loops,我有一个简单的问题,但我对来自PHP的Java还不熟悉。我需要将带分隔符的文本文件拆分为数组。我把它分解成一系列的线,每一行看起来都是这样的: { {Bob | Smithers | Likes Cats | Doesnt Like Dogs}, {Jane | Haversham | Likes Bats | Doesnt Like People} } // Initialize array String[] array = { "Bo

我有一个简单的问题,但我对来自PHP的Java还不熟悉。我需要将带分隔符的文本文件拆分为数组。我把它分解成一系列的线,每一行看起来都是这样的:

{
    {Bob | Smithers | Likes Cats | Doesnt Like Dogs},
    {Jane | Haversham | Likes Bats | Doesnt Like People}
}
    // Initialize array
    String[] array = {
            "Bob | Smithers | Likes Cats | Doesnt Like Dogs",
            "Jane | Haversham | Likes Bats | Doesnt Like People"
    };

    // Convert 1d to 2d array
    String[][] array2d = new String[2][4];
    for(int i=0;i<array.length;i++) {
        String[] temp = array[i].split(" \\| ");

        for(int j=0;j<temp.length;j++) {
            array2d[i][j] = temp[j];
        }
    }

    // Print the array
    for(int i=0;i<array2d.length;i++) {
        System.out.println(Arrays.toString(array2d[i]));
    }
{{Bob | Smithers | Likes Cats | Doesnt Like Dogs},{Jane | Haversham | Likes Bats | Doesnt Like People}}
我需要把它变成一个二维数组

在PHP中,这是轻而易举的事。您只需使用explode();我尝试在1d数组上使用String.split,结果也没那么糟糕。问题是,我还没有学会如何善待Java。所以我不知道如何循环数组并将其转换为2d。这就是我所拥有的:

for (i = 0; i < array.length; i++) {
    String[i][] 2dArray = array[i].split("|", 4);
}
for(i=0;i
PHP将是

for ($i = 0; $i < count($array); $i++) {
    $array[i][] = explode(",", $array[i]);
}
for($i=0;$i
您可以像这样循环阵列:

{
    {Bob | Smithers | Likes Cats | Doesnt Like Dogs},
    {Jane | Haversham | Likes Bats | Doesnt Like People}
}
    // Initialize array
    String[] array = {
            "Bob | Smithers | Likes Cats | Doesnt Like Dogs",
            "Jane | Haversham | Likes Bats | Doesnt Like People"
    };

    // Convert 1d to 2d array
    String[][] array2d = new String[2][4];
    for(int i=0;i<array.length;i++) {
        String[] temp = array[i].split(" \\| ");

        for(int j=0;j<temp.length;j++) {
            array2d[i][j] = temp[j];
        }
    }

    // Print the array
    for(int i=0;i<array2d.length;i++) {
        System.out.println(Arrays.toString(array2d[i]));
    }
{{Bob | Smithers | Likes Cats | Doesnt Like Dogs},{Jane | Haversham | Likes Bats | Doesnt Like People}}
//初始化数组
字符串[]数组={
“鲍勃|史密斯|喜欢猫|不喜欢狗”,
“简|哈弗森|喜欢蝙蝠|不喜欢人”
};
//将一维阵列转换为二维阵列
字符串[][]数组2d=新字符串[2][4];
对于(int i=0;i问题
如果我没弄错的话,你有这样的输入:

{
    {Bob | Smithers | Likes Cats | Doesnt Like Dogs},
    {Jane | Haversham | Likes Bats | Doesnt Like People}
}
    // Initialize array
    String[] array = {
            "Bob | Smithers | Likes Cats | Doesnt Like Dogs",
            "Jane | Haversham | Likes Bats | Doesnt Like People"
    };

    // Convert 1d to 2d array
    String[][] array2d = new String[2][4];
    for(int i=0;i<array.length;i++) {
        String[] temp = array[i].split(" \\| ");

        for(int j=0;j<temp.length;j++) {
            array2d[i][j] = temp[j];
        }
    }

    // Print the array
    for(int i=0;i<array2d.length;i++) {
        System.out.println(Arrays.toString(array2d[i]));
    }
{{Bob | Smithers | Likes Cats | Doesnt Like Dogs},{Jane | Haversham | Likes Bats | Doesnt Like People}}
可读版本:

{
    {Bob | Smithers | Likes Cats | Doesnt Like Dogs},
    {Jane | Haversham | Likes Bats | Doesnt Like People}
}
你想用一个二维的
String
aray,
String[][]
来表示这个结构


解决方案 关键是方法
String#split
,它将给定的
字符串
拆分为由给定符号分隔的子字符串。在您的示例中,这是

首先,我们删除所有
{
}
,因为我们不需要它们(只要文本本身不包含分隔符):

现在的案文是:

Bob | Smithers | Likes Cats | Doesnt Like Dogs,Jane | Haversham | Likes Bats | Doesnt Like People
接下来,我们要创建数组的外部维度,该维度由
拆分:

String[] entries = inputWithoutCurly.split(",");
现在的结构是:

[
    "Bob | Smithers | Likes Cats | Doesnt Like Dogs",
    "Jane | Haversham | Likes Bats | Doesnt Like People"
]
现在,我们希望将每个内部文本拆分为它们的组件。因此,我们迭代所有条目,按
|
拆分它们,并将它们收集到结果中:

// Declaring a new 2-dim array with unknown inner dimension
String[][] result = new String[entries.length][];

// Iterating all entries
for (int i = 0; i < entries.length; i++) {
    String[] data = entries[i].split(" | ");

    // Collect data to result
    result[i] = data;
}
一切紧凑:

String[] entries = input.replaceAll("[{}]", "").split(",");
String[][] result = new String[entries.length][];

for (int i = 0; i < entries.length; i++) {
    result[i] = entries[i].split(" | ");
}

当你这样做的时候,你会得到什么错误?为什么你会把结果限制在“4”?可能相关:你不会“把数组变成2d数组”。您读取第一个数组,然后将其中的每个项目写入到它自己的数组中,您还需要将其保存到某个位置。既然您声称已经从一个字符串中获取了一个数组,那么是什么阻止您从该数组中的每个字符串获取数组呢?M Prokhorov…我的无知阻止了我。Pshemo我得到了一句话@checkReturnValues,这也会有所帮助p如果您添加PHP代码作为参考。那么更容易理解您想要实现的目标。实际上不会起作用。您将在本示例的第13行获得运行此操作的
NullPointerException
。这正是我想要的!Thanks@M.Prokhorov您是否复制了整个代码并尝试运行它?我没有收到任何问题/错误使用流的另一种方法:
Pattern.compile(“,”).splitAsStream(输入)