此问题与我之前的问题Split a string contain dash and minus sign类似。但是我错误地问了它,然后它的语义略有不同,人们在那个角度回答(包括)。因此,我认为不应该修改这个问题,而是在新问题中提问。
我必须拆分一个包含连字符和减号的字符串。我试图基于unicode字符(https://en.wikipedia.org/wiki/Hyphen#Unicode)进行拆分,仍然考虑减号与连字号相同。有没有办法可以解决它?
预期输出
(COUN)
(US)
-1
实际输出
(COUN)
(US)
//实际上空白行将在此处打印,但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);
}
}
答案 0 :(得分:1)
char dash = '\u2010'; // 2010 is hyphen, 002D is hyphen-minus
int i = -1;
String a = "(country)" + dash + "(US)" + dash + i;
Pattern p = Pattern.compile("\u2010", Pattern.LITERAL);
String[] m = p.split(a);
for (String s : m) {
System.out.println(s);
}
整数的字符串表示形式始终使用连字符减号作为负号:
如果第一个参数为负数,则结果的第一个元素是ASCII减去字符' - ' (' \ u002D&#39)。如果第一个参数不是负数,则结果中不会出现符号字符。
所以最后你的字符串有3个连字符。这就是split
无法区分它们的原因。
由于您无法更改整数的字符串表示形式,因此需要更改dash
变量以存储连字符而不是连字符减号。现在,字符串中有2个连字符和1个连字符,使split
能够区分它们。