【发布时间】:2018-02-12 12:58:34
【问题描述】:
这个问题和我之前的问题Split a string contain dash and minus sign类似。但是我问错了,然后它的语义略有不同,人们从这个角度回答(包括)。因此,与其修改那个问题,我认为最好提出一个新问题。
我必须拆分一个包含连字符减号和减号的字符串。我尝试根据 unicode 字符(https://en.wikipedia.org/wiki/Hyphen#Unicode)进行拆分,但它仍然考虑与连字符减号相同的减号。有什么办法可以解决吗?
预期输出
(计数)
(美国)
-1
实际输出
(计数)
(美国)
// 实际上会在此处打印空白行,但 SO 编辑器会挤压空白行
1
public static void main(String[] args) {
char dash = '-';
int i = -1;
String a = "(country)" + dash + "(US)" + dash + i;
Pattern p = Pattern.compile("-", Pattern.LITERAL);
String[] m = p.split(a);
for (String s : m) {
System.out.println(s);
}
}
【问题讨论】:
-
尝试使用-符号后面不跟数字,例如:Pattern.compile('-[^0-9]')
-
-和\u002D实际上是完全相同的字符。所以你无法区分它们。因此,如果您的数据包含减号,请使用不同的分隔符,或者仅使用固定数量的字段进行拆分(仅当只有最后一个字段可以包含减号时才有效)。 -
为了避免混淆,我将 unicode 值更改为字符
-
根据en.wikipedia.org/wiki/Hyphen#Unicode,我认为减号 unicode(U+2212 − MINUS SIGN) 与连字符减号 unicode 不同。但是java split无法区分这2个
-
@ErwinBolwidt,他这样做了,但他预计 Java 的
Integer.toString没有。不幸的是(或不是),Java 使用\u002d作为减号,而不是\u2212。