Android阅读文本文件和拆分

时间:2011-07-29 07:00:09

标签: java android arrays multidimensional-array

我正在尝试读取包含整数的文本文件并将它们存储到2d数组中。 问题在于分裂。 我可以读到:

0 0 0
0 1 0
0 0 0

很好,任何数字0-9但我的数字超过9(10,100,1000)。 我的方法:

int[][] mapArray = new int[11][8];
    AndroidFileIO file = new AndroidFileIO(context.getAssets());
    InputStream is = null;
    try {
        is = file.readAsset("maps/map.txt");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.d("android", "could not load file");
    }
    Scanner scanner = new Scanner(is);
    scanner.useDelimiter(",");
    for (int i = 0; i < 11; i++) {
        for (int j = 0; j < 8; j++) {
            mapArray[i][j] = scanner.nextInt();
            Log.d("android", "" + mapArray[i][j]);
        }
    }

所以我尝试使用分隔符而不是挂起并告诉我我的类型不匹配? 阅读文件时分割整数的任何解决方案?

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来检索数字:

final Pattern PATTERN = Pattern.compile("(\\d+)");
final Matcher matcher = PATTERN.matcher(content);
while (matcher.find()) {
  final String numberAsString = matcher.group(0);
  final Integer number = Integer.valueOf(numberAsString);
  //do something with number
}

答案 1 :(得分:0)

在这里看起来你正在使用','作为分隔符,但在你在问题中提到的输入中,数字之间有空格。所以scanner.nextInt()试图将空格字符转换为int,因此类型不匹配。

[编辑]

然后scanner.nextInt()正在阅读您的换行符。添加对'\n'的检查 在阅读角色时忽略它。

答案 2 :(得分:0)

根据您的目的,您可以将文件中的每一行都读为字符串, 然后分开它。

String line = bufferedReader.readLine();   // line is something like "1 2 3"
String[] row = line.split("\\s+");         // got array ["1", "2", "3"]

然后将每个Array元素映射到目标数组更容易 并且您需要Integer.parseInt()来获取整数值。

答案 3 :(得分:0)

想出来用它作为我的分隔符:

    scanner.useDelimiter("[\\s,\r\n]+");