java分裂混淆空间字符

时间:2011-04-14 11:05:26

标签: java regex split space

我正在分割一个包含Windows系统文件名的字符串。该字符串使用ascii FS将文件名与其他信息分开

e.g。 filename.jpgFSotherInformationFSanotherPartOfInformation

这里有一些示例代码:

String fs = new String(new byte[]{(byte)32}); 
String information ="filename (copy).jpg"+fs+"otherInformation"; 
String[] parts = information.split(fs);

为什么拆分会将空格分隔符与ascii-FS混淆?

我应该使用不同的功能吗? Pattern.quote(fs)确实帮助......: - (

4 个答案:

答案 0 :(得分:1)

因为FS不是ascii值32。

http://bestofthisweb.com/blogs/tag/ascii-table/

FS是字符28,但是这个控制字符不应该用在文件名中,只能用于一些罕见的二进制文件格式(我不知道再使用它的那个)

空格字符是32,这就是它看起来与拆分相同的原因,因为它是。

对于简单的字段分隔符,我建议您使用','或'\ t',它们可以作为文本或使用电子表格包轻松阅读。

我建议逐步调试一下调试器中的代码,这样你就可以看到你的程序正在做什么。

答案 1 :(得分:1)

您已用空格(以相当复杂的方式)初始化fs。以下是相同的,并显示您的问题:

String fs = " "; 
String information ="filename (copy).jpg"+fs+"otherInformation"; 
String[] parts = information.split(fs);

ascii char FS的编号为0x1C,因此这应该可以正常运行:

String fs = "\u001C"; 
String information ="filename (copy).jpg"+fs+"otherInformation"; 
String[] parts = information.split(fs);

背景资料

  

文件分隔符FS是一个有趣的控制代码,因为它让我们深入了解计算机技术在六十年代的组织方式。我们现在习惯于随机访问媒体,如RAM和磁盘,但是当定义ASCII标准时,大多数数据都是串行的。我不仅谈论串行通信,还谈论打孔卡,纸带和磁带等串行存储。在这种情况下,使用单个控制代码来发信号通知两个文件的分离显然是有效的。为此目的定义了FS。 (source)

发明FS是为了在分层文件目录中分隔真正的文件而不是文件名。从技术上讲,是的,你可以使用它,但它有不同的含义。

答案 2 :(得分:0)

Beacuse FS是Ascii值28

Ascii值32为space

答案 3 :(得分:0)

Split的参数实际上是一个正则表达式,你试过吗

String[] parts = information.split("\\x20");

甚至

String[] parts = information.split("\\s");