5

我需要在java中用“-”作为分隔符分割一个字符串。例如:“单人间 - 享受您的住宿”

根据语言环境,我有相同的英语和德语数据。因此我不能使用通常的 string.split("-") 。“-”字符的 unicode 是 8212(dec) 或 x2014(hex)。如何使用 unicode 拆分字符串?

4

4 回答 4

7

你可能弄错了你得到的 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},但由于 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

“-”的十六进制是 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;
        }
    }
于 2012-03-08T04:46:51.640 回答