我试图读取包含整数的文本文件并将它们存储到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]);
}
}
所以我尝试使用分隔符,而不是它挂起,告诉我我得到一个类型不匹配?在读取文件时分割整数有什么解决方案吗?
您可以使用正则表达式来检索数字:
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
}
看起来您在这里使用','作为分隔符,但是在您在问题中提到的输入中,数字之间有空格。因此,scanner.nextInt()
试图将空格字符转换为int,因此类型不匹配。
则scanner.nextInt()
正在读取您的新行字符。增加'n'
检查在阅读字符时忽略它
根据您的目的,您可以将文件中的每一行作为字符串读取,然后拆分。
String line = bufferedReader.readLine(); // line is something like "1 2 3"
String[] row = line.split("\s+"); // got array ["1", "2", "3"]
那么将每个Array元素映射到目标数组就更容易了。
你需要integer。parseint()来获取整数值
决定使用这个作为分隔符:
scanner.useDelimiter("[\s,rn]+");