Java 分析字符串

Java 分析字符串,java,Java,我有一个字符串“AAABBB”,需要在java中将其解析为字符数组。然后我只需要测试“As”和“Bs”。我可以在大多数情况下使用以下代码,但当有一个字母不是“a”或“B”时,它仍然可能返回true StringBuilder a = new StringBuilder(); StringBuilder b = new StringBuilder(); boolean L1 = false; for (char ch: line.toCharArr

我有一个字符串“AAABBB”,需要在java中将其解析为字符数组。然后我只需要测试“As”和“Bs”。我可以在大多数情况下使用以下代码,但当有一个字母不是“a”或“B”时,它仍然可能返回true

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”这样的行时,它仍然返回true

我补充了这句话

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

但这让他们都错了

这将满足您的期望

    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

我不知道是否必须使用堆栈,但您可以像这样以更简单的方式完成此操作 代码:

输出:

AAAAAAABBBBBAAAAA

如果不需要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;

什么是
L1Stack
,为什么不直接使用行中的
char
s?为什么要使用
StringBuilder
s来执行
int
s的工作?为什么要在for循环中覆盖
ch
。那么我应该移动ch=L1Stack.peek();在for循环之外?那么ch不会保持不变,因为它只会偷看一次。L1Stack是我用字符串“AAABBB”中的字母填充的堆栈。此外,我们不允许计数字母,这就是我没有使用int s的原因。谢谢。我已经盯着这个看了好几个小时了!它工作得很好!基于OP的上一个问题,我认为堆栈是必要的。听起来不错,但展示其他方式也很好。你不同意吗?我当然不反对。目的是获取布尔值,而不是字符串输出,因此这不起作用。我认为这将被视为计数,我们不允许这样做。我不会称之为计数,因为你减少了计数并达到了任何变量的任何计数。
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;