我有一个String有一些ASCII控制字符(即RS(0x1e)和US(0x1f)).我在我的代码中定义了它们:
static public final byte RS = 0x1E;
static public final byte US = 0x1F;
Run Code Online (Sandbox Code Playgroud)
稍后在我的代码中,我想使用这些字符拆分字符串:
String[] records = content.split(String.valueOf(RS));
Run Code Online (Sandbox Code Playgroud)
但是,这不能正常工作.经过一番摆弄,我发现了这一点
String[] records = content.split("\u001e");
Run Code Online (Sandbox Code Playgroud)
确实有效,但在这种情况下,我必须记住这些代码.我RS也在其他部分使用静态字节,所以只是改变它不是一个真正的选择.我当然可以创建一个RS_STRING或者什么,但这意味着双重工作.
对此有什么干净的好解决方案?
将角色声明为char而不是byte为我修复它 - 以下工作正常:
char RS = 0x1E;
String s = new String(new char[]{'d', RS, 'e'});
System.out.println(s.split(String.valueOf(RS)).length); //Prints 2
Run Code Online (Sandbox Code Playgroud)
但是,使用字节作为类型会导致它失败:
byte RS = 0x1E;
String s = new String(new char[]{'d', (char)RS, 'e'});
System.out.println(s.split(String.valueOf(RS)).length); //Prints 1
Run Code Online (Sandbox Code Playgroud)
如果您需要在代码的其他部分中引用它,您当然可以将其转换char回来byte.