如何摆脱","在我的印刷结束?

时间:2014-04-05 04:39:34

标签: java stack

所以我创建了一个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();

}

这是我的测试:

public void testToString() {

    assertEquals("[A, B, C]", stack.toString());

}

这是我的toString方法的输出:

[A,B,C,]

7 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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的情况一样)。你怎么编程?

是的,我故意将[ ]字符留下;首先实现我在上面指定的逻辑,然后将括号放在其中是微不足道的。

答案 2 :(得分:0)

试试这个sb.substring(0,sb.length() - 1);

答案 3 :(得分:0)

在这些情况下我喜欢的一个简单技巧是检查字符串构建器是否为空并且预先设置分隔符。伪代码:

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

刚刚更新了您的方法:

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();

}

干杯!!

答案 6 :(得分:0)

试试这个:)

 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();

}