Java 将字符串拆分为一个字节

Java 将字符串拆分为一个字节,java,string,split,Java,String,Split,我有一个字符串,其中包含一些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[] rec

我有一个
字符串
,其中包含一些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\u字符串
之类的东西,但这意味着要加倍努力


有什么好的解决方案吗?

将字符声明为
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
但是,使用字节作为类型会导致其失败:

byte RS  = 0x1E;
String s = new String(new char[]{'d', (char)RS, 'e'});
System.out.println(s.split(String.valueOf(RS)).length); //Prints 1

当然,如果您需要在代码的其他部分引用
字符,您可以将
字符转换回
字节。

问题在于您使用
字符串.valueOf()
,因为没有字符串.valueOf(byte))

相反,字节被无声地加宽为
int
String。调用valueOf(int)
。这个方法返回整数的十进制字符串表示形式

这就是为什么将RS声明为char的建议修复了它,String.valueOf(char)确实做到了您所期望的(给出了一个包含该char的字符串)


您也可以在转换为字符串表示形式时添加显式强制转换:
String.valueOf((char)RS)
并将costant RS声明为字节。

为什么不使用
公共静态最终字符串RS\u String=new String(new byte[]{RS},StandardCharsets.US\u ASCII)
split()
接受正则表达式,您可能需要使用
Pattern.compile()
?@berry120在他的序列中没有特殊字符。@MarounnMaroun我的错,我误读了问题的后半部分。将RS声明为字符(而不是字节)很可能是一个问题?旁注: