Java 存储字符串缓冲区

Java 存储字符串缓冲区,java,Java,我的类中有一个StringBuffer,如果if语句中的条件得到满足,它将删除某些字符并打印该语句。然而,这可能会重复很多次。如果满足第二个条件,将打印第一条语句,而不删除字符 有办法解决这个问题吗?下面是我的代码 if (status == 1 && item == item1[1]){ item1[1] = "*"; w = sb1.append(item1[1]+"["+item2[1]+"] "); sb1.del

我的类中有一个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,它由以下部分组成:

项目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以查看它在做什么?