public class working {
public static String str = "123zASdcvb/;[";
public static void main(String[] args){
System.out.println("!!!"+new LetterInventory(str));
}
public static class LetterInventory {
public char[] arr;
public LetterInventory(String str){
//Strips our string of all non alphabetic garbage
//and assigns it. This regex removes all non a-z
//without regard for case of alphabet (?!).
this.arr = str.replaceAll("[^a-z]", "").toLowerCase().toCharArray();
Arrays.sort(this.arr); //I want to have it sorted to make my life easier.
System.out.printf("Our freshly sorted LI is : %s\n",this.toString());
}
//Simple enough.
public String toString() {
return this.arr.toString();
}
}
}
输出:
Our freshly sorted LI is : [C@6d69c9a2
!!![C@6d69c9a2
这里出了什么问题?我浏览了我的调试器,我的数组正是我想要的,它被创建,清理和排序就好了。但每当我尝试打印我的char []。toString()时,它就会出现screwey。为什么这样?
答案 0 :(得分:3)
您在数组上调用toString()
- 数组不会覆盖toString()
,因此您最终得到implementation from Object
:
类
toString
的{{1}}方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和无符号的十六进制表示形式组成。对象的哈希码。换句话说,此方法返回一个等于值的字符串:Object
当您处理getClass().getName() + '@' + Integer.toHexString(hashCode())
时,您应该使用char[]
构造函数来创建新字符串:
String
在其他情况下,您可能需要调用其中一个return new String(arr);
重载,以获得以逗号分隔的表示形式。
顺便说一下,为什么你自己在构造函数中做这些事情并不清楚。只使用Arrays.toString
方法,您的程序就会更简单:
main
答案 1 :(得分:0)
public String toString(){ return String.copyValueOf(arr); }
如果得到结果[C @ 6d69c9a2,则表示它是一个字符数组([for array,c for char],其哈希码为0x6d69c9a2