java - 如何读取特殊字符?
问题描述
我有如下记录
A^]B^]C^]^]^]
记录字段由^]
和它的一个特殊字符分隔。cat
我在 linux 中执行操作时看不到这个值,但是如果-A
操作符。
想知道如何^]
在 Java 中以特殊字符 ( ) 作为字段分隔符读取此类记录?
我应该提什么字段分隔符来检测它?
解决方案
^]
被称为插入符号,表示字节值 29,它是不可显示的 ASCII/Unicode 控制字符。这就是为什么你通常看不到它的原因。
在 Java 中,您可以使用八进制转义或 Unicode 转义来表示这样的字符:
八进制转义:
\35
Unicode 转义:
\u001D
如果您读入一行文本,以 结尾s = "A^]B^]C^]^]^]"
,其中^]
表示特殊字节 29 字符,那么您可以通过使用拆分字符串来获取字段值s.split("\35", -1)
。
这是显示它的代码:
String line = "A\u001DB\u001DC\u001D\u001D\u001D";
System.out.println("line = \"" + line + '"');
System.out.println("line.length() = " + line.length());
String[] fields = line.split("\35", -1);
for (String s : fields)
System.out.println('"' + s + '"');
输出
line = "ABC"
line.length() = 8
"A"
"B"
"C"
""
""
""
该代码使用 Unicode 转义来构建字符串,但在 中使用八进制转义split()
,只是为了表明它们是相同的字符。
如您所见,字符串长度为 8 个字符,但打印时只能看到 3 个可显示的字符。
然而,拆分确实显示有 6 个字段(由 5 个分隔符分隔)。
推荐阅读
- spartacus-storefront - B2B/Powertools Spartacus 3.3 - MyAccount 中缺少“重新订购”、“取消”和“退货”选项
- python - Pandas:数据框计算 - 带除法的新行,带总和和平均值的新列
- excel - 如果我在此类单元格上使用 VBA 函数,如何获取单元格地址?
- github - 列出所有请求的评论
- search - 如何在记事本++的窗口顶部显示找到的行
- java - ArrayList 索引中的换行符
- outlook - SharePoint 日历使用特定筛选器视图连接到 Outlook(审批工作流)
- sql - 根据组合的其他 2 列查询表中的 1 列
- quarkus - Quarkus - Optaplanner 调整算法
- javascript - Ember 3.25 BelongsTo not sideloading