String.split由分号表示

s_p*_*ria 8 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]);
Run Code Online (Sandbox Code Playgroud)

但它删除了";" 来自string并将所有字符串放入'datesplit 1 ',因此输出为:

dateSplit[0]:?
dateSplit[1]:?14/May/2015?? ??FC?? ??Barcelona?? ??VS.?? ??Real?? ??Madrid`
Run Code Online (Sandbox Code Playgroud)

演示

并在做

System.out.println("Real String :"+phrase);
Run Code Online (Sandbox Code Playgroud)

打印的字符串是

Real String :?;?14/May/2015?? ??FC?? ??Barcelona?? ??VS.?? ??Real?? ??Madrid
Run Code Online (Sandbox Code Playgroud)

T.G*_*lle 10

phrase包含双向字符一样从右至左嵌入.这就是为什么有些编辑无法正确显示字符串的原因.

这段代码显示了实际的字符String(对于某些人来说,phrase这里不会以正确的方式显示,但它在Eclipse中编译并且看起来很好).我只是翻译左右- >,从右到左< -流行方向^:

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());
}
Run Code Online (Sandbox Code Playgroud)

打印:

< - ; - > 14/May/2015 ^ ^ < - - > FC ^ ^ < - - >巴塞罗那^ ^ < - - > VS. ^ ^ < - - > Real ^ ^ < - - >马德里

String#split()会工作的实际字符串,而不是什么编辑器显示的,因此你可以看到;是之后的第二个字符从右到左,这给(再次当心显示:该;不是字符串的一部分dateSplit[1]) :

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

我猜你正在处理从右到左的语言写作/阅读中的数据,并且有一些与橄榄球队名称混合在一起的是从左到右.解决方案当然是摆脱方向字符并将其放在;正确的位置,即作为令牌的分隔符.