我正在尝试读取包含整数的文本文件并将它们存储到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]);
}
}
所以我尝试使用分隔符而不是挂起并告诉我我的类型不匹配? 阅读文件时分割整数的任何解决方案?
答案 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]+");