我的Class中有一个StringBuffer,如果在IF语句中满足条件并删除某些字符并打印该语句。但是,这可以重复多次。如果满足第二个条件,则第一个语句将打印出来而不删除任何字符。
有解决方法吗?以下是我的代码。
if (status == 1 && item == item1[1]){
item1[1] = "*";
w = sb1.append(item1[1]+"["+item2[1]+"] ");
sb1.delete(1,4);
}else if (status == 1 && item == item1[2]){
item1[2] = "*";
x = sb1.append(item1[2]+"["+item2[2]+"] ");
sb1.delete(1,4);
}else if(status == 1 && item == item1[3]){
item1[3] = "*";
y = sb1.append(item1[3]+"["+item2[3]+"] ");
sb1.delete(1,4);
}
return w.toString()+x.toString()+y.toString()+z.toString();
我想要实现的目标如下: 我有一个由以下内容组成的toString:
item1 [1] +“[”item2 [1]“]”+ item1 [2] +“[”+ tem2 [2] +“]”
我想这样做:
如果item1被标记为已拍摄,则会将其更改为“*”并删除它周围的item2 [1]和[],然后将其返回为:
eg: item1[2] = x
item2[2] = 1
* x[1]
( * used to be item1[1] )
但如果循环再次通过,我当前的类执行此操作: * [] * [1] 我希望它是: * * 当循环完成时
答案 0 :(得分:2)
一般问题:item
看起来像String
,item[]
就像String[]
。 不要对字符串使用==
,偶尔会产生意外结果。请改用equals()
:
if (status == 1 && item.equals(item1[1])) {
也可以将此模式用于其他条件检查。
(并为item == null
添加一个现在必要的测试/处理程序)
另一项改进:将StringBuffer
替换为StringBuilder
,并且在将字符串传递给追加时不会连接字符串。不是为了纠正错误,而是为了提供更好的性能:
w = sb1.append(item1[1]).append("[").append(item2[1]).append("] ");
答案 1 :(得分:0)
您的代码看起来很可疑。让我们拉出3次测试是否'status == 1'(变量中是否有一个隐藏的布尔值,它试图出来?)。并在代币之间放一些新鲜空气,使眼睛的工作更容易分开:
if (status == 1)
{
if (item.equals (item1[1]))
{
item1[1] = "*";
w = sb1.append (item1[1] + "[" + item2[1] + "] ");
sb1.delete (1, 4);
}
else if (item.equals (item1[2]))
{
item1[2] = "*";
x = sb1.append (item1[2] + "[" + item2[2] + "] ");
sb1.delete (1, 4);
}
else if (item.equals (item1[3]))
{
item1[3] = "*";
y = sb1.append (item1[3] + "[" + item2[3] + "] ");
sb1.delete (1, 4);
}
}
return (w.append (x). append (y). append (z)).toString ();
//
看起来像3次相同的语句,只是迭代1,2,3和w,x,y。我在最后一行也使用了append
,只是在最终结果上放了'toString()'。
让我们从3个语句中循环:
if (status == 1)
{
for (int i = 1; i < 4; ++i)
{
if (item.equals (item1[i]))
{
item1[i] = "*";
w = sb1.append (item1[i] + "[" + item2[i] + "] ");
sb1.delete (1, 4);
}
}
}
return (w.append (w). append (w). append (w)).toString ();
根据您的代码,副作用,线程等,这可能会导致一些不同,但我不这么认为。特别是我不知道w,x,y是默认的,如果没有在该代码部分中分配的话。并且代码看起来,好像item只是等于item1 [1]或item1 [2]或item1 [3]。但它可能等于所有3,然后循环将达到3次而不是1次。
然而,item1 / item2是代码气味。它闻起来像2-dim-array或没有很好地考虑面向对象(item.color,item.name或类似的东西)。