繁体   English   中英

使用 String.split() 循环遍历二维数组

[英]Looping through 2d array with String.split()

我有一个简单的问题,但我是来自 PHP 的 Java 的新手。 我需要将分隔的文本文件拆分为一个数组。 我把它分解成一系列行,每一行看起来像这样:

{
    {Bob | Smithers | Likes Cats | Doesnt Like Dogs},
    {Jane | Haversham | Likes Bats | Doesnt Like People}
}

我需要把它变成一个二维数组。

在 PHP 中,这是小菜一碟。 您只需使用 explode(); 我尝试在一维数组上使用 String.split,它也没有那么糟糕。 事情是,我还没有学会如何对 Java 好。 所以我不知道如何循环遍历数组并将其变成 2d。 这就是我所拥有的:

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

PHP 将是

for ($i = 0; $i < count($array); $i++) {
    $array[i][] = explode(",", $array[i]);
}

您可以像这样循环数组:

    // 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方法,该方法将给定的String拆分为由给定符号分隔的子字符串。 这是,| 在您的示例中。

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

String input = ...
String inputWithoutCurly = input.replaceAll("[{}]", "");

现在的文本是:

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;
}

最后,我们具有所需的结构:

[
    [ "Bob", "Smithers", "Likes Cats", "Doesnt Like Dogs" ],
    [ "Jane", "Haversham", "Likes Bats", "Doesnt Like People"]
]

一切紧凑:

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

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

如果您具有Java 8或更高版本,则可以使用Stream API以获得紧凑的功能样式:

String[][] result = Arrays.stream(input.replaceAll("[{}]", "").split(","))
    .map(entry -> entry.split(" | "))
    .toArray(String[][]::new);

我确实有一个类似的问题陈述与二维数组中的 csv 块:我想展平这个列表并创建一个单独的 csv 字符串:输入以下格式:[[sourcePKey,firstName,lastName,fullName,title,designation9,birthDate pkeyMultiValueBulk1 kk, , dNGDHA, RtUURv, 01-01-2020 pkeyMultiValueBulk200, kk, , dNGDHA, RtUURv, 02-01-2020 pkeyMultiValueBulk201, Kishlay, Kishore, , dNGDHA, RtUURv, 03-01-2020 pkeyMultiValueBulk202, Kishlay, Kishore,, , RtUURv, 04-01-2020 pkeyMultiValueBulk203, Kishlay, Kishore, , dNGDHA, RtUURv, 05-01-2020 pkeyMultiValueBulk204, Kishlay, Kishore, , dNGDHA, RtUURv, 06-01-2020 pkeyMultiValueBulk205, Kishlay, Kishore, , RtNGDHA , 07-01-2020 pkeyMultiValueBulk206, Kishlay, Kishore, , dNGDHA, RtUURv, 08-01-2020 pkeyMultiValueBulk207, Kishlay, Kishore, , dNGDHA, RtUURv, 09-01-2020 ], [pkeyMultiValueBulk208, Kishlay, Kishore, , dNGDHA, RtUURv,10-01-2020 pkeyMultiValueBulk209,基什莱,基什矿石, , dNGDHA, RtUURv, 11-01-2020 pkeyMultiValueBulk210, Kishlay, Kishore, , dNGDHA, RtUURv, 12-01-2020 pkeyMultiValueBulk211, Kishlay, Kishore, , dNGDHA, RtUURv, 13-01-2020 pkeyMultiValueBulk212, Kishore, , dNGDHA, RtUURv, 14-01-2020 pkeyMultiValueBulk213, Kishlay, Kishore, , dNGDHA, RtUURv, 15-01-2020 pkeyMultiValueBulk214, Kishlay, Kishore, , dNGDHA, RtUURv, 16-01-2020 pkeyMultiValueBulk215, Kishlay, Kishore, , RtUURv, 17-01-2020 pkeyMultiValueBulk216, Kishlay, Kishore, , dNGDHA, RtUURv, 18-01-2020 pkeyMultiValueBulk217, Kishlay, Kishore, , dNGDHA, RtUURv, 19-01-2020] ]

所需的 Output:源 PKey,firstName,lastName,fullName,title,designation,birthDate pkeyMultiValueBulk199,Kishlay,Kishore,,dNGDHA,RtUURv,01-01-2020 pkeyMultiValueBulk200,Kishlay,Kishore,Multi02-020-210URv Kishlay,Kishore,,dNGDHA,RtUURv,03-01-2020 pkeyMultiValueBulk202,Kishlay,Kishore,,dNGDHA,RtUURv,04-01-2020 pkeyMultiValueBulk203,Kishlay,Kishore,,dNGDHA,RtUURv,05-01-2020 pkeyMultiValueBulk204,Kishlay, Kishore,,dNGDHA,RtUURv,06-01-2020 pkeyMultiValueBulk205,Kishlay,Kishore,,dNGDHA,RtUURv,07-01-2020 pkeyMultiValueBulk206,Kishlay,Kishore,,dNGDHA,RtUURv,08-01-2020

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM