[英]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.