Java 如何有效地将字符串解析为整数[]?

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(","); } 在这一点上,

我使用的文件通常是以下形式:

{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(",");
    }

在这一点上,我意识到必须有一个更好的方式来阅读这篇文章。我试过使用
,但我不知道。

如果我理解你的问题,那么每一行对应于数组中第一维的不同单元格,每组法括号是第二维,法括号内的整数是第三维

这意味着您可以:

  • 定义一个方法
    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>,然后再次检查字符串以解析到这些数组中。问题是:你需要这种效率吗?如果这是在大型文件上每秒运行多次的内容的一部分,那么可能是的。否则就要看情况了。我通常会提高投票率,但我的声望不高,不足以让人看得见