拆分包含连字符和减号的字符串

时间:2018-02-12 12:58:34

标签: java regex

此问题与我之前的问题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);
        }
    }

1 个答案:

答案 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);
}

整数的字符串表示形式始终使用连字符减号作为负号:

来自Integer.toString

  

如果第一个参数为负数,则结果的第一个元素是ASCII减去字符' - ' (' \ u002D&#39)。如果第一个参数不是负数,则结果中不会出现符号字符。

所以最后你的字符串有3个连字符。这就是split无法区分它们的原因。

由于您无法更改整数的字符串表示形式,因此需要更改dash变量以存储连字符而不是连字符减号。现在,字符串中有2个连字符和1个连字符,使split能够区分它们。