分析一串字符

时间:2014-06-30 05:41:21

标签: java

我有一串字符" AAABBB"我需要解析为java中的字符数组。然后我需要测试" As"和" Bs"只要。我可以使用以下代码在大多数时间工作,但是当有一封不是" A"或" B"它可能仍然是真的。

StringBuilder a = new StringBuilder();
        StringBuilder b = new StringBuilder();
        boolean L1 = false;

        for (char ch: line.toCharArray()){
        ch = L1Stack.peek();
        if (ch == 'A'){
            a.append(L1Stack.pop());
        }
        if (ch =='B'){
            b.append(L1Stack.pop());
        }
    }
    if(a.length() == b.length()){
        L1 = true;
    }
    return L1;
}

当它读取类似" ABCBA"它仍然是真的。

我添加了这个声明

if(ch !='A' || ch !='B')
            break;

然后它会使它们都是假的。

3 个答案:

答案 0 :(得分:0)

这将达到您的预期

    StringBuilder a = new StringBuilder();
    StringBuilder b = new StringBuilder();
    boolean L1 = false;

    for (char ch: line.toCharArray()){
    ch = L1Stack.peek();
    if (ch == 'A'){
        a.append(L1Stack.pop());
    }
    else if (ch =='B'){
        b.append(L1Stack.pop());
    } else {
       return false;
    }
}
if(a.length() == b.length()){
    L1 = true;
}
return L1;
}

我已经改变了这一部分:

else if (ch =='B'){
    b.append(L1Stack.pop());
} else {
   return false;
}

如果不是A而不是B在字符串中,则函数返回false

答案 1 :(得分:0)

我不知道使用堆栈是否是强制性的,但你可以用这样更容易的方式完成 代码:

   String s = "AAAACCCAAABBBBBCCAAAACA";
        StringBuilder result = new StringBuilder();

        String[] sToArray = s.split("");
        for (String sIndex : sToArray) {
            switch (sIndex) {
                case "A":
                    result.append("A ");
                    break;
                case "B":
                    result.append("B ");
                    break;
                default:
                    continue;
            }
        }

        for (String v : result.toString().split(" ")) {
            System.out.print(v);
        }

输出:

AAAAAAABBBBBAAAAA

答案 2 :(得分:0)

如果您不需要As和Bs,那么使用更少的内存和对象会更好:

int checker = 0;
for (char ch: line.toCharArray()){
    ch = L1Stack.peek();
    if (ch == 'A'){
        L1Stack.pop();
        checker++;
    }
    if (ch =='B'){
        L1Stack.pop();
        checker--;
    }
}
if(checker == 0){
    return true;
}
return false;