Java:从显示ArrayList的Stringbuffer中删除括号和逗号

Java:从显示ArrayList的Stringbuffer中删除括号和逗号,java,regex,arraylist,stringbuffer,Java,Regex,Arraylist,Stringbuffer,假设目前我有一个ArrayList,我想在java程序中显示它 我有一个像这样的Stringbuffer: public String toString() { StringBuffer text = new StringBuffer(); text.append("First name: "); text.append(firstname); text.append(" "); text.append("Last name: "); text

假设目前我有一个ArrayList,我想在java程序中显示它

我有一个像这样的Stringbuffer:

public String toString() {
    StringBuffer text = new StringBuffer();
    text.append("First name: ");
    text.append(firstname);
    text.append("   ");
    text.append("Last name: ");
    text.append(lastname);

    //to give each result it's own line
    text.append(System.getProperty("line.separator"));

    return text.toString();
}
此处调用该方法:

NameDaoImpl name1 = new NameDaoImpl();
        Collection<NameBean> names = name1.getNames();
        System.out.println(betriebe);
但我希望它不带括号和逗号。我该怎么做呢?我尝试了replace和replaceall方法,但它们总是给我这样的错误:

return text.toString().replaceAll("[","").replaceAll("]","").replaceAll(",", "");
我总是遇到以下错误:

线程“AWT-EventQueue-0”java.util.regex.PatternSyntaxException中的异常:索引0附近的未关闭字符类 [

我使用了错误的方法吗?我应该使用不同的方法吗?或者错误在其他地方吗?

您的
toString()
函数本身就很好。它不包含括号;-)

括号由
ArrayList
toString()
方法发出。您可以用
StringBuilder
和列表中的循环来替换它


顺便说一句,您可以使用
StringBuilder
而不是
StringBuffer
。此处无需同步。

如果要打印它们而不使用括号和逗号,请不要直接在集合上调用
toString()
:这就是插入它们的原因:

for (NameBean name : name1.getNames()) {
  System.out.print(name);
}
或者,如果您希望它是一个字符串:

StringBuilder sb = new StringBuilder();
for (NameBean name : name1.getNames()) {
  sb.append(name);
}
String str = sb.toString();

括号不是由您发布的方法创建的。请在调用此方法的位置发布!
replaceAll
将正则表达式作为参数,并
[
作为特殊含义。这是一行代码,需要切分为3行进行调试。replaceAll需要一个有效的正则表达式。括号是reg表达式alphabeth的一部分。使用反斜杠“[”对其进行转义。您需要使用
return text.toString().replaceAll(\\[”,“”)。replaceAll(\\\],“”)。replaceAll(\\\],“”)。replaceAll(“”,“”),“”);
为了避免使用
replaceAll
时出现问题。嗯,我以前从未使用过stringbuilder。我会看看它。但是如何删除循环中的括号和逗号?@cadrian不一定会有什么不同,在Java 6之后(尽管我自己也会使用stringbuilder):@APL使用
StringBuilder
不会影响括号和逗号,它实际上只是在
toString()
@AndyTurner的实现中实现的。谢谢,我没有意识到这种优化。谢谢!我以前尝试过这种方法,但使用这两种方法,它会返回类似这样的内容,而不是数组中包含的数据:“商界人士。NameBean@512eacf1“这是因为您没有正确地覆盖NameBean上的toString——如果您也在集合上调用了toString,那么您必须具有相同的覆盖,因为这在元素上调用了toString。
StringBuilder sb = new StringBuilder();
for (NameBean name : name1.getNames()) {
  sb.append(name);
}
String str = sb.toString();