Разлитая строка с использованием разделителя Юникод
Мне нужно разделить строку с "-" в качестве разделителя в Java. Пример: "Одноместный номер - приятного пребывания"
У меня есть те же данные, поступающие на английском и немецком языках в зависимости от региона. Следовательно, я не могу использовать обычный string.split("-") . Юникод для символа "-" - 8212(декабрь) или x2014(шестнадцатеричный). Как мне разбить строку, используя юникод???
4 ответа
Вы можете ошибаться в том, какой символ черты Unicode вы получаете. Начиная с Unicode v6.1, существует 27 кодовых точек, которые имеют \p{Dash}
имущество:
U+002D - HYPHEN-MINUS
U+058A ֊ ARMENIAN HYPHEN
U+05BE ־ HEBREW PUNCTUATION MAQAF
U+1400 ᐀ CANADIAN SYLLABICS HYPHEN
U+1806 ᠆ MONGOLIAN TODO SOFT HYPHEN
U+2010 ‐ HYPHEN
U+2011 ‑ NON-BREAKING HYPHEN
U+2012 ‒ FIGURE DASH
U+2013 – EN DASH
U+2014 — EM DASH
U+2015 ― HORIZONTAL BAR
U+2053 ⁓ SWUNG DASH
U+207B ⁻ SUPERSCRIPT MINUS
U+208B ₋ SUBSCRIPT MINUS
U+2212 − MINUS SIGN
U+2E17 ⸗ DOUBLE OBLIQUE HYPHEN
U+2E1A ⸚ HYPHEN WITH DIAERESIS
U+2E3A ⸺ TWO-EM DASH
U+2E3B ⸻ THREE-EM DASH
U+301C 〜 WAVE DASH
U+3030 〰 WAVY DASH
U+30A0 ゠ KATAKANA-HIRAGANA DOUBLE HYPHEN
U+FE31 ︱ PRESENTATION FORM FOR VERTICAL EM DASH
U+FE32 ︲ PRESENTATION FORM FOR VERTICAL EN DASH
U+FE58 ﹘ SMALL EM DASH
U+FE63 ﹣ SMALL HYPHEN-MINUS
U+FF0D - FULLWIDTH HYPHEN-MINUS
В Perl или ICU, вы можете просто разделить прямо на \p{dash}
но со времен Солнца Pattern
Класс не поддерживает полные свойства Юникода, подобные этому, вы должны синтезировать его с помощью перечислимого класса символов в квадратных скобках. Итак, расщепление по шаблону:
string.split("[\u002D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2053\u207B\u208B\u2212\u2E17\u2E1A\u2E3A-\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]")
должен сделать трюк для вас. На самом деле вы можете использовать двойную обратную косую черту, если боитесь, что препроцессор Java будет мешать вам, потому что синтаксический анализатор регулярных выражений должен знать, чтобы понимать альтернативную нотацию.
Pattern p = Pattern.compile("\u0001", Pattern.LITERAL);
String items[] = p.split(message);
String s = "Single Room - Enjoy your stay":
String splits[] = s.split("\u002D");
for(String s1:splits){
System.out.println(s1);
}
Гекс для "-" составляет 2d (или) 45 в десятичном (или) 55 в восьмеричном. Используйте следующую программу, чтобы найти целочисленные значения для всех символов. Так что разделите, используя \u002d
public static void main(String[] args) {
int j=0;
for(int i=32; i<=131;i++)
{
System.out.print(i + ":\t" + (char)i +" ");
j++;
if(j>10)
{
System.out.println();
j=0;
}
}