5

Javaで区切り文字として「-」を使用して文字列を分割する必要があります。例:「シングルルーム-ご滞在をお楽しみください」

ロケールに応じて、英語とドイツ語で同じデータが提供されます。したがって、通常のstring.split( "-")を使用することはできません。「-」文字のUnicodeは8212(dec)またはx2014(hex)です。Unicodeを使用して文字列を分割するにはどうすればよいですか?

4

4 に答える 4

7

取得している Unicode ダッシュ文字を間違えている可能性があります。\p{Dash}Unicode v6.1 の時点で、次のプロパティを持つ 27 のコード ポイントがあります。

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}、SunPatternクラスはそのような完全な 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 プリプロセッサーが邪魔になることを恐れている場合は、実際にそれらを二重のバックスラッシュにすることができます。

于 2012-03-08T05:57:46.280 に答える
3
Pattern p = Pattern.compile("\u0001", Pattern.LITERAL);
String items[] = p.split(message);
于 2013-06-21T14:21:07.763 に答える
1
String s = "Single Room - Enjoy your stay":
String splits[] = s.split("\u002D");
for(String s1:splits){
    System.out.println(s1);
}
于 2012-03-08T04:42:19.010 に答える
0

「-」の 16 進数は 2d (または) 10 進数で 45 (または) 8 進数で 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;
        }
    }
于 2012-03-08T04:46:51.640 に答える