Java 如何摆脱&引用;在我打印的最后?

Java 如何摆脱&引用;在我打印的最后?,java,stack,Java,Stack,因此,我创建了一个toString方法,将堆栈更改为字符串类型。我希望我的输出是[A,B,C],但在我的方法中,它最终返回一个额外的“,”我不希望它这样做。如何使我的方法不会在最后一个元素后放置逗号空格 这是我的密码: public String toString(){ StringBuilder sb = new StringBuilder("["); Node<E> temp = topOfStack; while (temp != null) {

因此,我创建了一个toString方法,将堆栈更改为字符串类型。我希望我的输出是[A,B,C],但在我的方法中,它最终返回一个额外的“,”我不希望它这样做。如何使我的方法不会在最后一个元素后放置逗号空格

这是我的密码:

public String toString(){

    StringBuilder sb = new StringBuilder("[");
    Node<E> temp = topOfStack;
    while (temp != null) {
        sb.append(temp.data).append(", ");
        temp = temp.next;
    }
    return sb.append("]").toString();

}
下面是我的toString方法的输出:


[A,B,C,]

试试这个sb.子字符串(0,sb.length()-1)

实际上还有很多方法可以做到这一点。。以下只是其中之一

while (temp != null) {
        sb.append(temp.data);
        temp = temp.next;
        if(temp != null)
           sb.append(",");
    }

在这些情况下,我喜欢的一个简单技巧是检查字符串生成器是否为空,并在delimeter前面加上前缀。伪代码:

StringBuilder sb = new StringBuilder();
while(foo.hasNext()) {
    if (sb.length() > 0) sb.append(", ");

    sb.append(foo.bar()); 
}

您可以尝试将返回语句更改为以下内容:

ln = sb.length();
return sb.substring(0,ln-1).append("]").toString();

这是一个很好的逻辑练习,所以我只给出一些提示。您只希望在某些情况下添加逗号,而不是无条件地添加逗号。例如:

A           //No comma since string was empty before adding A
A, B        //Hint: the comma is coming before the B!
A, B, C     //Same hint
因此,如果要添加的字符串不是空的,则只希望包含逗号(就像添加B和C而不是A时的情况一样)。你怎么能编程呢


是的,我故意省略了
[]
字符;首先实现我在上面指定的逻辑,然后将括号放在其中是很简单的。

刚刚更新了您的方法:

public String toString(){

StringBuilder sb = new StringBuilder("[");
Node<E> temp = topOfStack;
while (temp != null) {
    if(sb.length() > 1)
       sb.append(", ");
    sb.append(temp.data);
    temp = temp.next;
}
return sb.append("]").toString();
公共字符串toString(){
StringBuilder sb=新的StringBuilder(“[”);
节点温度=topOfStack;
while(temp!=null){
如果(sb.length()>1)
某人加上(“,”);
sb.追加(临时数据);
温度=下一个温度;
}
返回sb.append(“]”).toString();
}

干杯

试试这个:)

公共字符串toString(){
StringBuilder sb=新的StringBuilder(“[”);
节点温度=topOfStack;
while(temp!=null){
sb.append(临时数据).append(临时下一步==null?”:“,”;
温度=下一个温度;
}
返回sb.append(“]”).toString();
}

您知道Apache
StringUtils
类的
join
方法吗?在这种情况下,它可能会很有用。不,我没有,我还没有学过类似的东西@user3321427的可能副本。请接受这个答案以奖励它。+1
public String toString(){

StringBuilder sb = new StringBuilder("[");
Node<E> temp = topOfStack;
while (temp != null) {
    if(sb.length() > 1)
       sb.append(", ");
    sb.append(temp.data);
    temp = temp.next;
}
return sb.append("]").toString();
 public String toString(){

    StringBuilder sb = new StringBuilder("[");
    Node<E> temp = topOfStack;
    while (temp != null) {    
    sb.append(temp.data).append(temp.next == null ? "" : ", "); 
    temp = temp.next;
    }
    return sb.append("]").toString();

}