java - String.split 以分号分隔

标签 java string split

我想用分号(“;”)分割一个字符串:

String phrase = "‫;‪14/May/2015‬‬ ‫‪FC‬‬ ‫‪Barcelona‬‬ ‫‪VS.‬‬ ‫‪Real‬‬ ‫‪Madrid";
String[] dateSplit = phrase.split(";");
System.out.println("dateSplit[0]:" + dateSplit[0]);
System.out.println("dateSplit[1]:" + dateSplit[1]);

但它删除了“;”从字符串并将所有字符串放入 'datesplit 1 ' 所以输出是:

dateSplit[0]:‫
dateSplit[1]:‪14/May/2015‬‬ ‫‪FC‬‬ ‫‪Barcelona‬‬ ‫‪VS.‬‬ ‫‪Real‬‬ ‫‪Madrid`

Demo

在做

System.out.println("Real String :"+phrase);

打印的字符串是

Real String :‫;‪14/May/2015‬‬ ‫‪FC‬‬ ‫‪Barcelona‬‬ ‫‪VS.‬‬ ‫‪Real‬‬ ‫‪Madrid

最佳答案

短语包含bi-directional characters喜欢right-to-left embedding .这就是为什么有些编辑器无法正确显示字符串的原因。

这段代码显示了 String 中的实际字符(对于某些人来说,phrase 不会以正确的方式显示在这里,但它编译并在 eclipse )。我只是用 -> 翻译 left-right,用 <- 翻译right-to-left使用 ^ 弹出方向:

public static void main(String[]args) {
    String phrase = "‫;‪14/May/2015‬‬ ‫‪FC‬‬ ‫‪Barcelona‬‬ ‫‪VS.‬‬ ‫‪Real‬‬ ‫‪Madrid";
    String[] dateSplit = phrase.split(";");
    for (String d : dateSplit) {
        System.out.println(d);
    }
    char[] c = phrase.toCharArray();
    StringBuilder p = new StringBuilder();
    for (int i = 0; i < c.length;i++) {
        int code = Character.codePointAt(c, i);
        switch (code) {
        case 8234:
            p.append(" -> ");
            break;
        case 8235:
            p.append(" <- ");
            break;
        case 8236:
            p.append(" ^ ");
            break;
        default:
            p.append(c[i]);
        }
    }
    System.out.println(p.toString());
}

打印:

<- ; -> 14/May/2015 ^ ^ <- -> FC ^ ^ <- -> Barcelona ^ ^ <- -> VS. ^ ^ <- -> Real ^ ^ <- -> Madrid

String#split() 将作用于实际 字符串,而不作用于编辑器显示的内容,因此您可以看到 ;right-to-left 之后的第二个字符,它给出(再次注意显示:; 不是 dateSplit[1 中字符串的一部分]):

dateSplit[0] = "";
dateSplit[1] = "14/May/2015‬‬ ‫‪FC‬‬ ‫‪Barcelona‬‬ ‫‪VS.‬‬ ‫‪Real‬‬ ‫‪Madrid";

我猜您正在处理从右到左书写/阅读的语言的数据,并且与从左到右的足球队名称有些混合。解决方案当然是摆脱方向字符并将 ; 放在正确的位置,即作为 token 的分隔符。

关于java - String.split 以分号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29771825/

相关文章:

php - 你如何在 php 中找到换行符?

java - 替换java中字符串中所有出现的子字符串

string - Angular 2 相当于 $interpolate

python - Python在点上分割字符串,后跟空白

python - Pandas - 计算并获取列中字符串值的唯一出现次数

c++ - 如何获得最后一个strtok?

java - Sql/Java 查询损坏 - 无法使用下拉列表中的输入?

java - 如何在没有包装器的情况下从 Java 应用程序创建服务(Windows)?

java - jTDS JDBC 驱动程序 : getNString() throws error

java - java中for循环体出现错误