首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储StringBuffer

存储StringBuffer
EN

Stack Overflow用户
提问于 2011-04-28 14:41:38
回答 2查看 439关注 0票数 0

我的类中有一个StringBuffer,如果在if语句中满足条件并打印该语句,它将删除某些字符。然而,这种情况可以重复多次。如果满足第二个条件,则第一条语句将打印出来,而不删除字符。

有办法绕道吗?下面是我的密码。

代码语言:javascript
复制
    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,它由以下组成:

item11+"["item21"] "+item12+“["+tem22+"]”

我想这么做:

如果item1被标记为采取了,它将被更改为"*“,并移除item21及其周围,然后返回如下:

代码语言:javascript
复制
     eg: item1[2] = x 
         item2[2] = 1


    * x[1]

( * used to be item1[1] )

但是,如果循环再次通过,我的当前类执行以下操作:*[] *1,当循环完成时,我希望它是:**

EN

回答 2

Stack Overflow用户

发布于 2011-04-28 14:49:50

一个普遍的问题:item看起来像Stringitem[]看起来像String[]。不要在String中使用==,它偶尔会产生意想不到的结果。使用equals()代替:

代码语言:javascript
复制
if (status == 1 && item.equals(item1[1])) {

在其他条件检查中也使用此模式。

(并为item == null添加一个现在需要的测试/处理程序)

另一个改进是:将StringBuffer替换为StringBuilder,不要在传递字符串以附加字符串时将它们连接起来。不是为了纠正错误,而是为了提供更好的性能:

代码语言:javascript
复制
 w = sb1.append(item1[1]).append("[").append(item2[1]).append("] ");
票数 2
EN

Stack Overflow用户

发布于 2011-04-28 15:18:30

你的密码看上去很可疑。让我们拿出3次测试是否'status == 1‘(变量中是否有隐藏的布尔值,然后尝试出来?)。在代币之间放点新鲜空气,让眼睛更容易把它们分开:

代码语言:javascript
复制
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条语句中创建一个循环:

代码语言:javascript
复制
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是什么,如果不在代码部分中分配的话。代码看起来好像条目要么等于item11,要么是item12或item13。但它可能等于所有3,然后循环将命中3次而不是1次。

但是,item1 1/item1 2是一种代码气味。它闻起来像是二维数组,或者没有很好地考虑面向对象(item.color、item.name或类似的东西)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5820387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档