substring和Vector.add的问题

时间:2016-02-20 00:09:41

标签: java string vector javafx-2

代码:

private static Vector<String> storage = new Vector<>();

//Message -> Vector
private static void convertToVector(String string) {
    String msg = string;

    int tempInt = 0;

    while (msg.length() > 1) {
        int run = 0;

        if (msg.indexOf('[') >= 0 && msg.indexOf(']') > 0 && msg.indexOf(':') >= 0) {
            storage.add(msg.substring(msg.indexOf('[')+1, msg.indexOf(':')));
        }

        if (msg.indexOf(':') > 0 && msg.indexOf(']') > 0) {
            tempInt = msg.indexOf("][#");
            if (tempInt < 1)
                tempInt = msg.length()-1;   
            storage.add(msg.substring(msg.indexOf(':')+1, tempInt));
        }

        if (msg.length() > tempInt) {
            msg = msg.substring(tempInt+1);
            run = 1;
        }

        if (msg.length() == tempInt || run == 0)
            msg = "";
    }

    for (int i = 0; i < storage.size(); i++) {
                System.out.println(storage.get(i));
    }
}


案例1 msg = [#userInfo#:xyz]&lt; - working

    #userInfo#
    xyz

案例2 msg = [#userInfo#:xyz] [#userInfo#:xy]&lt; - 不工作?

    #userInfo#
    xyz

案例3 msg = [#userInfo#:xyz] [#userInfo#:xy] [#userInfo#:gfdgfd]&lt; - working

    #userInfo#
    xyz
    #userInfo#
    xy
    #userInfo#
    gfdgfd

任何人都可以解释为什么case2不起作用,只有当最后一个用户名等于上一个减去最后一个字母时才会发生。

2 个答案:

答案 0 :(得分:1)

我怀疑你想把你的上一张支票改为:

        if (msg.length() > tempInt) {
            msg = msg.substring(tempInt + 1);
        } else {
            msg = "";
        }

并摆脱运行变量。

在情况2中,在消息已被修改以删除初始匹配后,将根据tempInt检查消息长度,并且巧合地还有临时字符。

我认为你只是试图在比赛失败或击中结束时停止,所以“其他”应该没问题,除非我遗漏了什么。

答案 1 :(得分:0)

我不知道你有什么原因:

if (msg.length() == tempInt || run == 0) msg = "";

在第二种情况下,这是正确的,因为你的while条件是msg.length() > 1,所以你退出循环。

注释掉该行并看到它为您提供所需的输出。