如何在Java中删除字符串缓冲区的最后一个字符?

4

我有以下代码,想从StringBuffer中删除最后添加的字符:

StringBuffer Att = new StringBuffer();
BigDecimal qty = m_line.getMovementQty();
int MMqty = qty.intValue();
for (int i = 0; i < MMqty;i++){
    Att.append(m_masi.getSerNo(true)).append(",");
}
String Ser= Att.toString();
fieldSerNo.setText(Ser);

我希望在 For 循环结束后删除最后一个值后面的逗号“ , ”。

2
如果 i 不等于 0,则字符串为 ',' + string。 - Avinash Raj
你可以执行Att.deleteCharAt(Att.length()-1)操作。 - Arnaud
4个回答

11

对于您的具体用例,请考虑@AndyTurner的答案。在大多数情况下,不处理后续将被丢弃的数据是最有效的解决方案。

否则,要回答您的问题,

如何在Java中删除字符串缓冲区的最后一个字符?

您可以使用StringBuffer.setLength()简单地调整StringBuffer的长度:

...
StringBuffer buf = new StringBuffer();
buf.append("Hello World");
buf.setLength(buf.length() - 1);
System.err.println(buf);
...

输出:

Hello Worl

请注意,这需要在 StringBuffer 中至少有一个字符可用,否则会收到 StringIndexOutOfBoundsException

如果给定的长度小于当前长度,则 setLength 方法基本上将 AbstractStringBuilder 类的 count 成员设置为给定的新长度。在那种情况下,不执行其他操作,如字符数组复制。


4

不要一开始就添加它:

for (int i = 0; i < MMqty;i++){
    Att.append(m_masi.getSerNo(true));
    if (i + 1 < MMqty) Att.append(",");
}

另外,请注意,如果您不需要同步(在此代码中似乎不需要),最好使用 StringBuilder


0
尝试这段代码:
在你现有的代码下面添加以下一行。
 Ser = Ser.substring(0, Ser.length()-1); 

完整代码:

StringBuffer Att = new StringBuffer();
    BigDecimal qty = m_line.getMovementQty();
    int MMqty = qty.intValue();

    for(int i =0; i< MMqty;i++){


        Att.append(m_masi.getSerNo(true)).append(",");
    }   

    String Ser= Att.toString();
    Ser = Ser.substring(0, Ser.length()-1);
fieldSerNo.setText(Ser);

0
请检查这个。
如果您不再使用该字符,请不要添加,为什么要删除最后一个附加的字符
    for (int i = 0; i < MMqty-1;i++){
        Att.append(m_masi.getSerNo(true)).append(",");
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接