String.split 分割数据行无法正常工作

发布于 2024-12-02 00:59:38 字数 814 浏览 0 评论 0原文

我使用 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] 将是 5...

我到底需要做什么才能解决这个问题? 请解释“换行”在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦里的微风 2024-12-09 00:59:38

我认为 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.

寄离 2024-12-09 00:59:38

问题很可能出在您在 VB 中显示的代码中。

我通过 vbNewLine 常量创建新行(我认为它的 ASCII 代码是 13)

首先验证这一点,然后查找代码 13 是什么!这是一个通用的 ascii 表

代码 13 是回车符,在 Java 中表示为 \r

代码 10 是换行符,在 Java 中表示为 \n

一个好的提示是阅读一些有关 NewLines,完全搞砸了,Windows 和 Linux 使用不同的方式来表示新行。

  • CR+LF: Microsoft Windows、DEC TOPS-10、RT-11 和大多数其他早期非 Unix 和非 IBM 操作系统、CP/M、MP/M、DOS(MS-DOS、PC -DOS 等)、Atari TOS、OS/2、Symbian OS、Palm OS
  • LF: Multics、Unix 和类 Unix 系统(GNU/Linux、AIX、Xenix、Mac OS X、 FreeBSD 等)、BeOS、Amiga、RISC 操作系统等。
  • CR: Commodore 8 位机器、Acorn BBC、TRS-80、Apple II 系列、Mac OS 最高版本 9 和 OS-9

Most probably it is from the code you show in VB that is the problem.

I create new line by vbNewLine constant (I think its ASCII code is 13)

First verify this for certain, then look up what code 13 is! Here is a general ascii table.

code 13 is a carrige return and is represented in Java as \r

code 10 is line feed and is represented in Java as \n

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.

  • CR+LF: Microsoft Windows, DEC TOPS-10, RT-11 and most other early non-Unix and non-IBM OSes, CP/M, MP/M, DOS (MS-DOS, PC-DOS, etc.), Atari TOS, OS/2, Symbian OS, Palm OS
  • LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others.
  • CR: Commodore 8-bit machines, Acorn BBC, TRS-80, Apple II family, Mac OS up to version 9 and OS-9
时光沙漏 2024-12-09 00:59:38

为什么不使用 扫描仪来读取您的文件并分割行?

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(";");
    // ...
  }
}

Why don't you use Scanner to read your file and split for lines instead?

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(";");
    // ...
  }
}
喵星人汪星人 2024-12-09 00:59:38

vbNewLine 与平台相关。在 Windows 上,换行符由两个字符 \n 和 \r 组成,而不仅仅是 \n

vbNewLine is platform dependant. on windows newline is comprissed of two characters \n and \r and not just \n

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文