1

在我的程序中,我有以下数组字符串,当我处理程序时,输出有方括号 [],但我需要没有方括号 []。有关如何删除它们的任何建议?

private final static String[] l0 = {"az","Fh md Br", "Inr Gt Cn", "Bl Gs he St st", "Mae is a nw Get", "Pam is a Ml rm", "Comr lab Pl Mt hs", "za"};

public static String sfuffle()
{
List<String> shuffled = new ArrayList<String>(Arrays.asList(phraseString));
    Collections.shuffle( shuffled );
    System.out.println(shuffled);// added only to have the output
    return  shuffled + "\n";    
}

输出:

[az, Mae is a nw Get, Bl Gs he St st, Fh md Br, za, Comr lab Pl Mt hs, Inr Gt Cn, Pam is a Ml rm]

我想要的输出是:

az, Mae is a nw Get, Bl Gs he St st, Fh md Br, za, Comr lab Pl Mt hs, Inr Gt Cn, Pam is a Ml rm
4

3 回答 3

3

只需使用substring()

String str = shuffled.toString();
return str.substring(1, str.length() - 1) + "\n";

根据大众的需求,我将首先解释为什么你会得到一个带括号的字符串。当你写类似的东西时

shuffled + "\n"

这被转换为

new StringBuilder().append(shuffled).append("\n")

StringBuilder是为字符串连接和操作而设计的类。当您附加一个对象(在本例中为 )时,将附加该对象的方法shuffled返回的字符串。toString()现在, shuffled 是一个,ArrayList并使用. 您可以从将返回表单字符串的文档中看到(其中每个都是集合的一个元素)。当然,是换行符,不会直接可见。toString()AbstractCollectiontoString()[e1, e2, ..., en]ei"\n"

于 2013-08-07T14:52:29.480 回答
2

当你这样做时:

return  shuffled + "\n";

您实际上正在这样做:

return  shuffled.toString() + "\n";

括号来自ArrayList.toString()


使用for循环,您可以按照自己的方式构建字符串,而不依赖于toString()实现:

String s = "";
for(int i = 0; i < shuffled.size(); i++) {
    if(i > 0) s += ", "; // add the separator
    s += shuffled.get(i); // add list item
}
return s + "\n";
于 2013-08-07T14:53:44.440 回答
1

括号来自 ArrayList 的实现toString() (就像 MightyPork 说的)

只需删除字符串的第一个和最后一个字符

return str.substring(1, str.length() - 1) + "\n";

所以你的方法看起来像这样:

public static String sfuffle()
{
    List<String> shuffled = new ArrayList<String>(Arrays.asList(phraseString));
    Collections.shuffle( shuffled );
    String str = shuffled.toString();
    str = str.substring(1, str.length() - 1); //this line removes the brackets
    System.out.println(str); //for debugging
    return  str + "\n";    
}

它将打印不带括号的列表,并将返回不带括号的列表

于 2013-08-07T15:05:57.343 回答