Java Android读取文本文件和拆分
我试图读取一个包含整数的文本文件,并将它们存储到二维数组中。 问题是分裂。 我可以阅读:Java Android读取文本文件和拆分,java,android,arrays,multidimensional-array,Java,Android,Arrays,Multidimensional Array,我试图读取一个包含整数的文本文件,并将它们存储到二维数组中。 问题是分裂。 我可以阅读: 0 0 0 0 1 0 0 0 0 很好,任何数字都是0-9,但我的数字超过9(101001000)。 我的方法: int[][] mapArray = new int[11][8]; AndroidFileIO file = new AndroidFileIO(context.getAssets()); InputStream is = null; try { i
0 0 0
0 1 0
0 0 0
很好,任何数字都是0-9,但我的数字超过9(101001000)。
我的方法:
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]);
}
}
int[]mapArray=newint[11][8];
AndroidFileIO文件=新的AndroidFileIO(context.getAssets());
InputStream=null;
试一试{
is=file.readAsset(“maps/map.txt”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
Log.d(“android”,“无法加载文件”);
}
扫描仪=新扫描仪(is);
scanner.useDelimiter(“,”);
对于(int i=0;i<11;i++){
对于(int j=0;j<8;j++){
mapArray[i][j]=scanner.nextInt();
Log.d(“安卓”和“+mapArray[i][j]);
}
}
所以我尝试使用分隔符,但它挂起并告诉我类型不匹配?
在读取文件时,是否有拆分整数的解决方案?看起来您在这里使用“,”作为分隔符,但在您在问题中提到的输入中,数字之间有空格。因此,
scanner.nextInt()
试图将空格字符转换为int,因此类型不匹配
[编辑]
然后,scanner.nextInt()
正在读取新行字符。为'\n'
阅读字符时忽略它。看起来您在这里使用了“,”作为分隔符,但在您在问题中提到的输入中,数字之间有空格。因此,
scanner.nextInt()
试图将空格字符转换为int,因此类型不匹配
[编辑]
然后,scanner.nextInt()
正在读取新行字符。为'\n'
并在读取字符时忽略它。可以使用正则表达式检索数字:
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
}
可以使用正则表达式检索数字:
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
}
根据您的用途,您可以将文件中的每一行作为字符串读取, 然后把它分开
String line = bufferedReader.readLine(); // line is something like "1 2 3"
String[] row = line.split("\\s+"); // got array ["1", "2", "3"]
这样就更容易将每个数组元素映射到目标数组。您需要Integer.parseInt()来获取整数值。根据您的用途,您可以将文件中的每一行作为字符串读取, 然后把它分开
String line = bufferedReader.readLine(); // line is something like "1 2 3"
String[] row = line.split("\\s+"); // got array ["1", "2", "3"]
这样就更容易将每个数组元素映射到目标数组。您需要Integer.parseInt()来获取整数值。找到了将其用作分隔符的方法:
scanner.useDelimiter("[\\s,\r\n]+");
我想用它作为我的分隔符:
scanner.useDelimiter("[\\s,\r\n]+");
如果(mScanner.hasNext())位于mapArray[i][j]=scanner.nextInt()之前,请将这一行放在前面;可能有效,也可以提供日志07-29 03:29:27.569:ERROR/AndroidRuntime(5933):致命异常:GLThread 10 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):java.util.InputMismatchException 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):at java.util.Scanner.ner.java:1025)07-29 03:29:27.569:ERROR/AndroidRuntime(5933):在java.util.Scanner.nextInt(Scanner.java:1373)07-29 03:29:27.569:ERROR/AndroidRuntime(5933):在java.util.Scanner.nextInt(Scanner.java:1337)您是否尝试过我在上述评论中提到的方法?是的,我尝试过。似乎没有任何变化=/如果(mScanner.hasNext())在mapArray[i][j]=scanner.nextInt()之前,则将这一行放在前面;可能有效,也可以提供日志07-29 03:29:27.569:ERROR/AndroidRuntime(5933):致命异常:GLThread 10 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):java.util.InputMismatchException 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):at java.util.Scanner.ner.java:1025)07-29 03:29:27.569:ERROR/AndroidRuntime(5933):在java.util.Scanner.nextInt(Scanner.java:1373)07-29 03:29:27.569:ERROR/AndroidRuntime(5933):在java.util.Scanner.nextInt(Scanner.java:1337)您是否尝试过我在上述评论中提到的方法?是的,我尝试过。似乎没有什么变化=/文件实际上是:0,0,0,0,0,1,1,1,然后换行并重复。我认为这与新行有关?文件实际上类似于:0,0,0,0,0,1,1,1,然后是新行并重复。我认为这与新行有关?我不熟悉Pattern和Matcher,如果可能的话,我想继续使用我正在使用的。这只是一种基于正则表达式搜索文本模式的简单而强大的方法。我不熟悉Pattern和Matcher,我想继续使用我正在使用的都有可能。这只是一种简单而强大的方法,可以在文本中搜索基于正则表达式的模式。速度有很大差异吗?对不起,我从来没有测试过。但是由于Alex只编译了一次正则表达式,他的代码可能会更快。速度有很大差别吗?对不起,我从来没有测试过。但是由于Alex只编译一次正则表达式,他的代码可能会更快。