Java 存储字符串缓冲区
我的类中有一个StringBuffer,如果if语句中的条件得到满足,它将删除某些字符并打印该语句。然而,这可能会重复很多次。如果满足第二个条件,将打印第一条语句,而不删除字符 有办法解决这个问题吗?下面是我的代码Java 存储字符串缓冲区,java,Java,我的类中有一个StringBuffer,如果if语句中的条件得到满足,它将删除某些字符并打印该语句。然而,这可能会重复很多次。如果满足第二个条件,将打印第一条语句,而不删除字符 有办法解决这个问题吗?下面是我的代码 if (status == 1 && item == item1[1]){ item1[1] = "*"; w = sb1.append(item1[1]+"["+item2[1]+"] "); sb1.del
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,它由以下部分组成: 项目1[1]+“[”项目2[1]”]“+item1[2]+“[”+tem2[2]+“]” 我想这样做: 如果item1标记为Take,则它将更改为“*”,并删除item2[1]及其周围的[],然后将其返回为:
eg: item1[2] = x
item2[2] = 1
* x[1]
( * used to be item1[1] )
但是如果循环再次通过,我当前的类将执行以下操作:
*[] *[1]
我希望它是:
* *
当循环完成时一个常见问题:
项
看起来像一个字符串
,项[]
看起来像一个字符串[]
。不要将==
与字符串一起使用,它偶尔会产生意外的结果。改用equals()
:
if (status == 1 && item.equals(item1[1])) {
对其他条件检查也使用此模式
(并为item==null
添加一个测试/处理程序,现在这是必需的)
另一个改进:将
StringBuffer
替换为StringBuilder
,并且在将字符串传递给append时不连接字符串。不是为了纠正错误,而是为了提供更好的性能:
w = sb1.append(item1[1]).append("[").append(item2[1]).append("] ");
你的代码看起来可疑。让我们拿出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 ();
if(状态==1)
{
对于(int i=1;i<4;++i)
{
如果(第1项等于(第1项[i]))
{
第1项[i]=“*”;
w=sb1.append(item1[i]+“[”+item2[i]+“]);
sb1.删除(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维数组,或者没有很好地考虑对象定向(item.color、item.name或类似的东西) 你的代码有什么问题?我发现你的问题很难理解。当代码中并没有print语句时,你们并没有说明你们的问题是什么,你们谈论的是打印。问题并不清楚。代码不清楚。请提供一个输入和预期输出的例子。在我看来,你不需要w,x,y(,z),因为它们都只引用sb1。就我所见,您实际返回了四次sb1(如果z也包含对sb1的引用),您将sb1分配给w,x,y。您是否尝试过在调试器中运行您的proram以查看它在做什么?