我一直在努力处理我的代码“行为”在过去两个小时里真的很奇怪。
我正在使用LibGdx进行项目。
我想做什么?
我读取了一个文本文件,并从文件的行中创建了一个String数组。 现在我想取一行,在其中替换一个关键字并将剩余的String解析为整数。
String[] lines = data.split(System.getProperty("line.separator"));
int moves = Integer.parseInt(lines[11].replace("POSITION", ""));
但每当我尝试在Android上运行该程序时,它就会崩溃,只是说致命异常。
奇怪的是,看似相同的代码有效。
int moves = (int) Float.parseFloat(lines[11].replace("POSITION", ""));
int moves = Integer.parseInt(lines[11].replace("POSITION", "").substring(0, 1));
这两项工作都没有问题......
但为什么第一个(也是最直接的)代码不起作用?
第[11]行只持有“POSITION5”
这是我在LogCat中遇到的整个错误:
09-30 11:12:31.815 19016-19088/com.jradventure.game E/AndroidRuntime: FATAL EXCEPTION: GLThread 1154
Process:
com.jradventure.game, PID: 19016
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:410)
at java.lang.Integer.parseInt(Integer.java:367)
at java.lang.Integer.parseInt(Integer.java:334)
at com.jradventure.game.Helper.LevelLoader.run(LevelLoader.java:98)
at com.jradventure.game.Screens.LevelScreen.setupStage(LevelScreen.java:170)
at com.jradventure.game.Screens.LevelScreen.<init>(LevelScreen.java:72)
at com.jradventure.game.Screens.LevelSelectionScreen$1.run(LevelSelectionScreen.java:77)
at com.jradventure.game.UIElements.SelectionButton$1.touchUp(SelectionButton.java:57)
这让我疯了!请解释一下!
答案 0 :(得分:0)
嗯。你写道:
line[11] only holds "POSITION5"
您编码:
Integer.parseInt(lines[11].replace("POSITION", "").substring(0, 10))
"POSITION"
。5
。StringIndexOutOfBoundsException
,我会非常惊讶。与整数解析无关。
删除.substring(...)
部分或.replace(...)
。
答案 1 :(得分:0)
所以我认为我找到了解决问题的方法。
我遇到了与从文本文档加载的数据更奇怪的交互。我正在使用
String data = Gdx.files.internal(path).readString();
阅读文本文件。
我用缓冲的阅读器替换它,一切正常......
InputStream is = Gdx.files.internal(path).read();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String line = in.readLine();
也许readString
方法做了一些抛出android的格式化,我不知道。
感谢您的帮助!