2012-03-08 17 views
3

我需要在java中用「 - 」分隔字符串作爲分隔符。 例如:「單人間 - 享受您的逗留」使用Unicode分隔符的溢出字符串

我有相同的數據來在英語和德語取決於語言環境。因此我不能使用通常的string.split(「 - 」)。 「 - 」字符的Unicode是8212(十進制)或x2014(十六進制)。如何使用unicode分割字符串?

+0

我假設你嘗試使用'「\ u2014」'作爲分隔符,對吧? – dasblinkenlight 2012-03-08 04:27:01

+0

是的。我試圖做string.split(「\ u2014」)。但它沒有工作。 – Bhavya 2012-03-08 04:32:58

回答

1
String s = "Single Room - Enjoy your stay": 
String splits[] = s.split("\u002D"); 
for(String s1:splits){ 
    System.out.println(s1); 
} 
0

「 - 」的十六進制是十進制的(或)45的二進制(或)45。使用以下程序爲所有符號查找整數值。所以使用\ 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; 
     } 
    } 
3

您可能會誤認爲您正在獲取哪個Unicode短劃線字符。爲Unicode V6.1中,有有\p{Dash}財產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},但由於太陽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預處理器會妨礙您的行爲,那麼實際上可以雙擊反斜槓,因爲正則表達式解析器應該知道要理解備用符號。

2
Pattern p = Pattern.compile("\u0001", Pattern.LITERAL); 
String items[] = p.split(message);