Разделить строку на байт

у меня есть 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 или что-то, но это означает двойную работу.

чистые хорошее решение для этого?

2 ответов


объявление символа как 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

вы можете, конечно, бросить char на byte Если вам нужно ссылаться на него как таковой в других частях вашего кода.


проблема заключается в использовании String.valueOf(), потому что там не строку.valueOf (byte).

вместо этого байт молча расширяется до int и String.valueOf(int) называется. И этот метод возвращает десятичное строковое представление int.

вот почему предложение объявления RS как char исправляет его, String.valueOf (char) действительно делает то, что вы ожидаете (дает строку с этим символом в ней).

вы можете поочередно просто добавить явный приведение при преобразовании в строковое представление:String.valueOf((char) RS) и держите costant RS объявленным как байт.