Разлитая строка с использованием разделителя Юникод - PullRequest
5 голосов
/ 08 марта 2012

Мне нужно разделить строку с "-" в качестве разделителя в Java. Пример: «Одноместный номер - приятного пребывания»

У меня одни и те же данные на английском и немецком в зависимости от локали. Следовательно, я не могу использовать обычный string.split ("-"). Юникод для символа "-" - 8212 (декабрь) или x2014 (шестнадцатеричный). Как мне разбить строку, используя Юникод ???

Ответы [ 4 ]

5 голосов
/ 08 марта 2012

Возможно, вы ошибаетесь в том, какой символ черты 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}, но поскольку класс Sun Pattern не поддерживает такие полные свойства Unicode, вы должны синтезировать его с помощью перечислимого класса символов в квадратных скобках. Итак, расщепление по шаблону:

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 будет мешать вам, потому что синтаксический анализатор регулярных выражений должен знать, чтобы понимать альтернативную запись.

3 голосов
/ 21 июня 2013
Pattern p = Pattern.compile("\u0001", Pattern.LITERAL);
String items[] = p.split(message);
1 голос
/ 08 марта 2012
String s = "Single Room - Enjoy your stay":
String splits[] = s.split("\u002D");
for(String s1:splits){
    System.out.println(s1);
}
0 голосов
/ 08 марта 2012

Гекс для «-» составляет 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;
        }
    }
...