Java 如何有效地将字符串解析为整数[]?
我使用的文件通常是以下形式: {0},{0} {0 0},{0 0},{0 0},{0 0},{0 0} 所以我需要一个Java 如何有效地将字符串解析为整数[]?,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我使用的文件通常是以下形式: {0},{0} {0 0},{0 0},{0 0},{0 0},{0 0} 所以我需要一个整数[][]来存储矩阵数组 我试过: String path = "file.txt"; String[] var = (String[]) Files.lines(Path.of(path)).toArray(); for(String s:var) { String[] var2 = s.split(","); } 在这一点上,
整数[][]
来存储矩阵数组
我试过:
String path = "file.txt";
String[] var = (String[]) Files.lines(Path.of(path)).toArray();
for(String s:var) {
String[] var2 = s.split(",");
}
在这一点上,我意识到必须有一个更好的方式来阅读这篇文章。我试过使用
流
,但我不知道。如果我理解你的问题,那么每一行对应于数组中第一维的不同单元格,每组法括号是第二维,法括号内的整数是第三维
这意味着您可以:
a()
,该方法接受类似{1 2 3 4}
的字符串,并返回一个包含这些数字的整数[]b()
,该方法接受一行,如{1 2 3}、{4 5 6}
,它将行拆分为,
,并为每个标记调用a()
一次,然后返回一个整数[]
,其中包含所有整数[]
结果c()
,该方法获取一个行数组,并为每行调用一次b()
,然后返回一个Integer[][][]
并填充所有Integer[][]
结果如果我理解你的问题,那么每一行对应于数组中第一维的不同单元格,每一组大括号是第二维,大括号内的整数是第三维 这意味着您可以:
a()
,该方法接受类似{1 2 3 4}
的字符串,并返回一个包含这些数字的整数[]b()
,该方法接受一行,如{1 2 3}、{4 5 6}
,它将行拆分为,
,并为每个标记调用a()
一次,然后返回一个整数[]
,其中包含所有整数[]
结果c()
,该方法获取一个行数组,并为每行调用一次b()
,然后返回一个Integer[][][]
并填充所有Integer[][]
结果你说的“高效”是什么意思?最简单的方法可能是在文本周围添加
{}
后使用JSON解析器。Stream API实际上不喜欢使用基本数组(更喜欢List
之类的集合API),因此您不太可能对生成矩阵所需的代码印象深刻。继续使用您的方法(但请使它们int[][][]
而不是Integer[][][]
)高效:不要调用toArray
将所有行一次读取到内存中,请使用Stream.forEach
(或Stream.map
)。不要对正则表达式使用split
,而是使用charAt
和indexOf
首先计算字符串的每个小节中有多少个元素,然后分配一个大小合适的Integer[]
或Integer[][/code>,然后再次检查字符串以解析到这些数组中。问题是:你需要这种效率吗?如果这是在大型文件上每秒运行多次的内容的一部分,那么可能是的。否则,这要视情况而定。我通常会提高投票率,但我的声誉不足以让人看得见。你说的“高效”是什么意思?最简单的方法可能是在文本周围添加{}
后使用JSON解析器。Stream API实际上不喜欢使用基本数组(更喜欢List
之类的集合API),因此您不太可能对生成矩阵所需的代码印象深刻。继续使用您的方法(但请使它们int[][][]
而不是Integer[][][]
)高效:不要调用toArray
将所有行一次读取到内存中,请使用Stream.forEach
(或Stream.map
)。不要对正则表达式使用split
,而是使用charAt
和indexOf
首先计算字符串的每个小节中有多少个元素,然后分配一个大小合适的Integer[]
或Integer[][/code>,然后再次检查字符串以解析到这些数组中。问题是:你需要这种效率吗?如果这是在大型文件上每秒运行多次的内容的一部分,那么可能是的。否则就要看情况了。我通常会提高投票率,但我的声望不高,不足以让人看得见