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