我有一个String
,其中包含一些ASCII控制字符(即RS
(0x1e)和US
(0x1f))。我已经在我的代码中定义了它们:
static public final byte RS = 0x1E;
static public final byte US = 0x1F;
稍后在我的代码中,我想使用这些字符拆分字符串:
String[] records = content.split(String.valueOf(RS));
但是,这不能正常工作。经过一番摆弄,我发现了这个
String[] records = content.split("\u001e");
确实有效,但在这种情况下,我必须记住代码。我也在其他部分使用RS
静态字节,所以只是改变它不是一个真正的选择。我当然可以创建RS_STRING
或其他东西,但这意味着双重工作。
对此有什么干净利益的解决方案吗?
答案 0 :(得分:2)
问题是你使用String.valueOf()
,因为没有String.valueOf(byte)。
而是将字节静默扩展为int
并调用String.valueOf(int)
。此方法返回int的十进制字符串表示。
这就是为什么将RS声明为char的建议修正了它,String.valueOf(char)确实做了你所期望的(给它一个带有该char的字符串)。
您可以选择在转换为String表示时添加显式强制转换:String.valueOf((char) RS)
并将costant RS声明为字节。