Символы соответствия регулярного выражения Java вне Базовой многоязычной плоскости - PullRequest
17 голосов
/ 27 октября 2010

Как мне сопоставить символы (с целью их удаления) за пределами базовой многоязычной плоскости Юникода в Java?

Ответы [ 2 ]

20 голосов
/ 27 октября 2010

Для удаления всех не-BMP символов должно работать следующее:

String sanitizedString = inputString.replaceAll("[^\u0000-\uFFFF]", "");
4 голосов
/ 27 октября 2010

Вы ищете определенные символы или все символы вне BMP?

Если первое, вы можете использовать StringBuilder для построения строки, содержащей кодовые точки из более высоких плоскостей, и регулярное выражение будет работать какожидается:

  String test = new StringBuilder().append("test").appendCodePoint(0x10300).append("test").toString();
  Pattern regex = Pattern.compile(new StringBuilder().appendCodePoint(0x10300).toString());

  Matcher matcher = regex.matcher(test);
  matcher.find();
  System.out.println(matcher.start());

Если вы хотите удалить всех не-BMP символов из строки, то я бы использовал StringBuilder напрямую, а не регулярное выражение:

** 1011
...