String.split 分割数据行无法正常工作
我使用 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
,会导致Integer.parseInt
异常。然后我调试,发现这个:
rawData.charAt(31) //It's a \r, not \n
所以,我改变了分割线:
String[] levelData = rawData.split("\r");
但现在,levelData[1] 将是
。
我到底需要做什么才能解决这个问题? 请解释“换行”在 Java String 中的工作原理。
I use VB.NET to create data for my game (for Android, Java code), this is how it look like:
5;0000000100011100010000000;2;2
5;1000001100010000000000000;0,1;0,1
where each line is a level. In VB.NET, I create new line by vbNewLine constant (I think its ASCII code is 13) then use IO.File.WriteAllText
to write it to the file.
In my game in Java, I use \n
to split the levels:
String[] levelData = rawData.split("\n");
However, when processing throught the data, the levelData always has a "new line" after the end. For example, the levelData[0] is 5;00...2;2<new line>
, which cause Integer.parseInt
exception. Then I debug, and found this:
rawData.charAt(31) //It's a \r, not \n
So, I change the split line:
String[] levelData = rawData.split("\r");
But now, the levelData[1] will be <newline>5...
.
What exactly do I have to do to solve this problem? And please explain how "new line" work in Java String.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我认为 vbNewLine 常量将“\r\n”放在末尾,因此在拆分时留下一个字符。尝试使用两者来分割它。
I suppose that vbNewLine constant put both "\r\n" at the end and hence one character is left while splitting. Try to split it by using both.
问题很可能出在您在 VB 中显示的代码中。
首先验证这一点,然后查找代码 13 是什么!这是一个通用的 ascii 表。
一个好的提示是阅读一些有关 NewLines,完全搞砸了,Windows 和 Linux 使用不同的方式来表示新行。
Most probably it is from the code you show in VB that is the problem.
First verify this for certain, then look up what code 13 is! Here is a general ascii table.
A good tip would be to read up a little about NewLines, It's completely fu**ed up, Windows and Linux uses different ways of representing a new line.
为什么不使用 扫描仪来读取您的文件并分割行?
Why don't you use Scanner to read your file and split for lines instead?
vbNewLine 与平台相关。在 Windows 上,换行符由两个字符 \n 和 \r 组成,而不仅仅是 \n
vbNewLine is platform dependant. on windows newline is comprissed of two characters \n and \r and not just \n