Разделить строку на байт
у меня есть 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 объявленным как байт.