【问题标题】:Parse file and splitting individual lines into 2d array解析文件并将单行拆分为二维数组
【发布时间】:2019-05-17 05:53:08
【问题描述】:

我有一个文本文件,其中每个字符串包含一行数字,比如 203,我有一个二维数组 int puzzle[][]

文件的行在数组列表Arraylist<String>行中。数组列表中的第一个字符串进入puzzle[0]。第二个字符串进入puzzle[1],等等。

我遇到的问题是,在拆分行后,我无法将这些数字转换为整数,因为它给了我 -1 的数字格式异常,如果我将它拆分 - 和 1 。

我尝试了以下方法,还对字符串数组进行了深拷贝,然后将每个字符串转换为整数

public void parseFile(ArrayList<String> lines)
  {

     ArrayList<String> l = lines;
     for(int i =0; i<puzzle.length; i++)
         puzzle[i][0] = Integer.parseInt(l.get(i).split(""));
 }

它应该给我带有整数的二维数组

【问题讨论】:

  • 您也可以提供示例输入吗?
  • 好像文件格式不好,你怎么知道203是2,0和3还是20和3?
  • 这是一些编程挑战的一部分吗?
  • 这些是该数组列表中的三行,数字如 -10-1
  • @AbhishekAbhishek 你能添加样本输入和输出吗

标签: java file


【解决方案1】:

这是一个方法,它将获取由单个数字组成的字符串列表并将列表转换为 int 的二维数组。此代码没有使用 Java 8 流。

public static int[][] parseFile(List<String> lines) {
    int[][] result = new int[lines.size()][];

    int multiplier = 1;
    int counter = 0;
    for (String line : lines) {
        List<Integer> row = new ArrayList<>();
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);
            if (c == '-') {
                multiplier = -1;
                continue;
            } 
            int n = (int)c - 48; 
            row.add(n * multiplier);
            multiplier = 1;
        }
        int[] rowArray = new int[row.size()];
        for (int j = 0; j < row.size(); j++) {
            rowArray[j] = row.get(j);
        }
        result[counter] = rowArray;
        counter++;
    }
    return result;
}

下面是我的测试代码,从main执行

List<String> list = new ArrayList<>();
list.add("-111");
list.add("2-13");

int[][] result = parseFile(list);
for (int i = 0; i < result.length; i++) {
    for (int j = 0; j < result[i].length; j++) {
        System.out.printf("%d ", result[i][j]);
    }
    System.out.print("\n");
}

输出

-1 1 1
2 -1 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多