2013-08-07 19 views
1

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

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 
+0

你这是什么意思outout?你在控制台上看到了什么?返回值?或两者? –

+0

@PhilippSander显然是返回值 - System.out仅用于调试。 – MightyPork

+0

@MightyPork,为什么oyu确定他不想要两个? –

回答

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()方法返回的字符串。现在,洗牌是ArrayList,并使用AbstractCollection中定义的toString()方法。您可以从documentation中看到toString()将返回表单[e1, e2, ..., en](其中每个ei是集合的一个元素)的字符串。当然,"\n"是换行符,不会直接可见。

+1

这解决了这个问题,但并未解释发生了什么事情,或者如何更好地做到这一点。 – MightyPork

+0

@MightyPork OP没有问到发生了什么事情,这里似乎过分了。我不知道“如何做得更好”是什么意思,我想不出比这更简单的方法。 – arshajii

+0

+ +1为一个令人惊讶的简单的答案,虽然toString方法的快速解释不会伤害:) – Jyro117

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"; 
+0

你实际上做的是'new StringBuilder()。append(shuffled).append(“\ n”)。toString()'。另外,为什么你要经历从零开始创建字符串的麻烦?你可以简单地操作'toString()'返回的字符串。 – arshajii

+0

+1好解释 –

+0

@arshajii依靠类似的东西不是一个好习惯,实现可能会改变(尽管这不太可能)。并且真的不需要使用StringBuilder使问题复杂化,无论是哪种情况,编译器都会使用它,所以为什么要混淆源代码。 – MightyPork

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";  
} 

这将打印不带括号的名单,并返回它没有括号

+0

如果已经有多个完全相同的解决方案,真的不需要发布答案。 – MightyPork

+0

这个答案只是我的方式来解释和解决它...我真的没有得到downvote –

+0

这应该不是已经downvoted ... – arshajii