我有一串字符" 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;
然后它会使它们都是假的。
答案 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;