使用Unicode分隔符溢出的字符串

Bha*_*vya 5 java string unicode character-properties

我需要在Java中使用“-”作为分隔符来拆分字符串。例如:“单人间-祝您住宿愉快”

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

tch*_*ist 6

您可能会误以为您要获得哪个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
Run Code Online (Sandbox Code Playgroud)

在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]")
Run Code Online (Sandbox Code Playgroud)

应该为您解决问题。如果您担心Java预处理程序会妨碍您的使用,那么实际上可以对它们加双反斜杠,因为正则表达式解析器应该知道理解备用表示法。


Cha*_*har 1

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