我使用VB.NET为我的游戏创建数据(适用于Android,Java代码),这就是它的样子:
5;0000000100011100010000000;2;2
5;1000001100010000000000000;0,1;0,1
其中每一行都是一个级别。在VB.NET中,我通过vbNewLine常量创建新行(我认为它的ASCII代码是13)然后使用IO.File.WriteAllText
将其写入文件。
在我的Java游戏中,我使用\n
来分割级别:
String[] levelData = rawData.split("\n");
但是,在处理整个数据时,levelData在结束后总是有一个“新行”。例如,levelData [0]为5;00...2;2<new line>
,导致Integer.parseInt
异常。然后我调试,发现了这个:
rawData.charAt(31) //It's a \r, not \n
所以,我改变了分割线:
String[] levelData = rawData.split("\r");
但是现在,levelData [1]将是<newline>5...
。
我究竟需要做些什么才能解决这个问题? 请解释“新行”如何在Java String中工作。
答案 0 :(得分:10)
我认为vbNewLine常量将两个“\ r \ n”放在最后,因此在分割时会留下一个字符。尝试使用两者进行拆分。
答案 1 :(得分:4)
很可能是你在VB中显示的代码就是问题。
我通过vbNewLine常量创建新行(我认为它的ASCII代码是13)
首先验证这一点,然后查找代码13是什么!这是一般ascii table。
代码13是一个carrige返回,在Java中表示为\ r
代码10是换行符,用Java表示为\ n
一个好的提示是阅读一些关于NewLines的信息,它完全被提升,Windows和Linux使用不同的方式来表示新的一行。
答案 2 :(得分:2)
为什么不使用Scanner来阅读文件并拆分换行?
Scanner sc = new Scanner(new File("levels.text"));
while (sc.hasNextLine()) {
String nextLine = sc.nextLine();
if(nextLine.lenght() > 0) { // you could even use Java regexes to validate the format of every line
String[] levelElements = nextLine.split(";");
// ...
}
}
答案 3 :(得分:1)
vbNewLine依赖于平台。在Windows上,换行符包含两个字符\ n和\ r \ n而不仅仅是\ n