我正在分割一个包含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)确实帮助......: - (
答案 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");