String.split由分号表示

时间:2015-04-21 12:09:08

标签: java string split

我想用分号分隔字符串(&#34 ;;"):

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]);

但它删除了&#34 ;;"来自字符串并将所有字符串放入' 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

3 个答案:

答案 0 :(得分:10)

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

这段代码显示String中的实际字符(对于某些人来说phrase在这里以正确的方式显示,但它在Eclipse中编译并且看起来很好)。我只是将左右 - &gt; 从右到左翻译为&lt; - 和< ^

的强>流行方向
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());
}

打印:

  

&lt; - ; - &GT; 14 / May / 2015 ^ ^&lt; - - &gt; FC ^ ^&lt; - &gt;巴塞罗那^ ^&lt; - - &gt; VS. ^ ^&lt; - - &gt; Real ^ ^&lt; - &gt;马德里

String#split()将用于实际字符串,而不是编辑器显示的内容,因此您可以看到;之后的第二个字符从右到左,它提供(谨防再次显示:;不是dateSplit[1]中字符串的一部分):

  

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

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

答案 1 :(得分:1)

rewrote你的代码,而不是从这里处理,它的工作非常好。

public static void main(String[] args) {
    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]);
}

Demo

答案 2 :(得分:0)

将代码剪切并粘贴到IntelliJ中,搞砸了编辑器;正如@Palcente所说,可能存在编码问题。

但是,我建议改用StringTokenizer。

StringTokenizer sTok = new StringTokenizer(phrase, ";");

然后,您可以对其进行迭代,从而获得更好(更安全)的代码。