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

标签 java regex

这个问题和我之前的问题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);
        }
    }

最佳答案

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 :

If the first argument is negative, the first element of the result is the ASCII minus character '-' ('\u002D'). If the first argument is not negative, no sign character appears in the result.

所以最后你的字符串有 3 个连字符减号。这就是为什么 split 无法区分它们。

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

关于java - 拆分包含连字符和减号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747089/

相关文章:

java - 从 java 应用程序启动数据流作业

java - 如何在一个 JFrame 上显示两个对象同时保持其位置?

java - 如何更改字符串内的部分文本格式(颜色,sizebold斜体)?

regex - 雷博尔能做到吗?

python - 在列表 python 上应用正则表达式模式列表

java - 我应该将序列化对象放在 Java 程序中的什么位置?

java - java中是否可以不使用main方法来执行jar文件

java - 匹配时忽略 html 标签的正则表达式

正则表达式 sed 问题

Java,提取$符号之间的单词