我不知道为什么我必须在split(String reges)方法中使用Array.toString。我试过,如果我离开Array.toString()方法,但之后该方法只写出内存地址。
这是原始代码:
public static String knights=
"Then, when you have found the shrubbery, you must " +
"cut down the mightiest tree in the forest... " +
"with... a herring!";
public static void split(String regex){
System.out.println(Arrays.toString(knights.split(regex)));
}
我试过这个:
public static void split(String regex){
System.out.println(knights.split(regex).toString());
}
但它只写出了地址,并没有包含骑士。
或者如何在不使用Arrays.toString()方法的情况下重写split方法?
答案 0 :(得分:2)
Arrays.toString
调用是必要的,因为String#split
返回一个字符串数组。或者,您可以迭代结果,如下所示:
String[] results = knights.split(regex);
for (String result : results) {
System.out.println(result);
}
输出的格式会略有不同,但它实现了相同的想法。但正如您所看到的,Arrays.toString
更简洁,您需要的工作量更少。但是,迭代方法(上面)使您可以更好地控制输出的格式。
答案 1 :(得分:2)
程序打印内存地址的原因是因为这就是数组的toString()方法的行为(而String.split()返回一个String-array)。
为什么不想使用Arrays.toString()?你想要的输出并不完全清楚。如果你只是想要另一种方法来获得相同的输出,你可以这样做:
String[] splitted = knights.split(regex);
List<String> list = Arrays.asList(splitted);
System.out.println(list);
答案 2 :(得分:0)
使用String.split()方法时,它返回一个String数组,最初根据你的正则表达式进行分隔。
Array Class已覆盖toString()方法,因此当您在System.out语句中使用它时,您可以看到所有标记。
答案 3 :(得分:0)
数组是Java中的一种特殊类型的对象,它必须由编译器以不同方式处理(例如索引)。它使用Object
的默认toString()
方法,该方法仅打印地址。数组(此处为String[]
)不是Arrays
的实例,它只是一个用于处理数组的辅助类。
答案 4 :(得分:0)
...试
public static void split(String regex){
String[] strArr = knights.split(regex); // Split the knights string using the specified delimiter
// Cycle through the array
for (String a : strArr) {
System.out.print(a + " ");
}
System.out.println();
}
纯数组没有像Java中的其他对象那样的良好toString
方法(这解释了为什么你得到了一个地址而不是一个元素列表)。因此,要打印出数组的内容,您几乎总是需要使用for
循环遍历它或使用Array类的静态toString方法,就像您在第一个代码段中所做的那样同样适合你。
总而言之,隐式toString(例如System.out.println(someArray)
)与Array.toString(someArray)
不同。
答案 5 :(得分:0)
有关Arrays
的实用方法toString
,请参阅此API Doc,您需要了解将数组传递给它时的作用。这就是“原始代码”中使用的方法。
但是在您的代码中,您调用的是另一种toString
方法。
答案 6 :(得分:0)
回到Java 1.0时代,数组上的.toString()方法是默认实现,所以
knights.split(regex).toString()
会打印出来
[java.lang.String@01234abcdef]
或其他(我不记得确切的格式)。最终决定应该有一个很好的方法来打印漂亮的数组,但是改变行为或者array.toString()为时已晚。
因此,java.util.Arrays上的一个静态帮助器方法是新的.toString(数组)方法,这就是为什么你不能只在数组上调用.toString()。
正如其他人所指出的那样,如果确实想要避免使用Arrays.toString(),那么可以使用循环。但是可以使用库函数。