Как вы используете регулярное выражение, чтобы разделить строку по символу Unicode? - PullRequest
1 голос
/ 09 августа 2011

Мне нужна помощь с использованием регулярных выражений. Я прочитал заметки Java Regex , но не смог найти способ обойти мою проблему.

ПРОБЛЕМА : У меня есть строка, которая должна быть разделена во всех случаях символов Unicode \ 0, \ 1 и \ 2.

ПРОБОВАЛИ

String msg ="foo\0foo\0bar\2foo\1horse"
msg.split("[\1\0\2]");

Вышеприведенное работает отлично (не уверен, что это правильное использование регулярных выражений), но

String msg ="foo\0foo\0bar\2foo\1horse\1123123\0123123\21"
msg.split("[\1\0\2]");

не работает правильно, так как кажется, что регулярное выражение выбирает \ 1k (с k любое целое число) вместо просто \ 0 и \ 1 и \ 2.

Есть мысли?

решаемые : Я обнаружил, что проблема в тестировании заключалась в том, что я использовал собственную сгенерированную строку Использование \ 1 перед числовыми значениями, сделанными String, автоматически включает \ 1k в качестве символа, а не \ 1. При чтении из моего источника, оно приходило в байтах и, следовательно, имело правильный \ 1 кодированный. При декодировании и перекодировании (вручную) я допустил ошибку. Работа с необработанными данными решила проблему.

В качестве альтернативы я использовал unicode для повторного инкодирования, и это тоже сработало. Спасибо за ответы на все вопросы. Узнал немного о Regex и Unicode.

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Попробуйте использовать буквенную форму символа Юникод (\uXXXX):

String msg ="foo\u0000bar\u0001gah\u0002zip\u0001horse\u0001123123\u0000456456\u00021";
String ss[] = msg.split("[\u0000-\u0002]");
// ss = ["foo", "bar", "gah", "zip", "horse", "123123", "456456", "1"];
2 голосов
/ 09 августа 2011

Я думаю, что вы хотите

msg.split("[\u0000\u0001\u0002]");

в соответствии с http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...