Java 为什么我必须在Split方法中使用Array.toString?
我不知道为什么我必须在split(String reges)方法中使用Array.toString。我已经尝试过,如果我离开Array.toString()方法,但是在那之后,该方法只写出内存地址 这是原始代码:Java 为什么我必须在Split方法中使用Array.toString?,java,arrays,tostring,Java,Arrays,Tostring,我不知道为什么我必须在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
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());
}
但是它只写了地址,没有写骑士的名字
或者我如何在不使用array.toString()方法的情况下重写split方法?由于
String#split
返回字符串数组,因此必须调用array.toString
。或者,您可以按如下方式迭代结果:
String[] results = knights.split(regex);
for (String result : results) {
System.out.println(result);
}
输出的格式可能略有不同,但实现了相同的想法。但是正如您所看到的,
Arrays.toString
更加简洁,并且您所需的工作量更少。但是,迭代方法(如上)使您能够更好地控制输出的格式。数组。toString调用是必需的,因为String#split
返回一个字符串数组。或者,您可以按如下方式迭代结果:
String[] results = knights.split(regex);
for (String result : results) {
System.out.println(result);
}
输出的格式可能略有不同,但实现了相同的想法。但是正如您所看到的,Arrays.toString
更加简洁,并且您所需的工作量更少。但是,迭代方法(如上)使您能够更好地控制输出的格式。当您使用String.split()方法时,它会返回一个字符串数组,这些字符串最初是根据正则表达式分隔的
Array类重写了toString()方法,因此当您在System.out语句中使用它时,您可以看到所有标记。当您使用String.split()方法时,它返回一个字符串数组,该数组最初是根据正则表达式分隔的
Array类已覆盖toString()方法,因此当您在System.out语句中使用它时,您可以看到所有标记。数组是Java中的一种特殊类型的对象,编译器必须对其进行不同的处理(例如索引)。它使用
Object
的默认toString()
方法,该方法只打印地址。数组(String[]
此处)不是Arrays
的实例,它只是一个处理数组的助手类。数组是Java中一种特殊类型的对象,编译器必须以不同的方式处理它(例如索引)。它使用Object
的默认toString()
方法,该方法只打印地址。数组(String[]
此处)不是Arrays
的实例,它只是一个用于处理数组的助手类。请尝试
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
循环对其进行迭代,或者像在第一个代码片段中那样使用数组类的静态toString方法,这对您来说几乎是一样的
总而言之,隐式的toString,例如System.out.println(someArray)
,与Array.toString(someArray)
不同
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
循环对其进行迭代,或者像在第一个代码片段中那样使用数组类的静态toString方法,这对您来说几乎是一样的
总而言之,隐式的toString,例如System.out.println(someArray)
,与Array.toString(someArray)
不同。toString(someArray)请参见数组中的实用方法toString
,您需要了解它在传递数组时的作用。这就是“原始代码”中使用的方法
但是在您的代码中,您正在调用一个不同的toString
方法。请参见Arrays
中的实用程序方法toString
,您需要了解它在传递数组时的作用。这就是“原始代码”中使用的方法
但是在您的代码中,您正在调用一个不同的toString
方法。早在Java 1.0时代,数组上的.toString()方法是默认实现,因此
knights.split(regex).toString()
会打印出来吗
[java.lang.String@01234abcdef]
或者别的什么(我记不起确切的格式)。最终决定应该有一种很好的方法来打印数组,但是现在改变数组的行为已经太晚了
因此,java.util.array上的静态帮助器方法之一是新的.toString(array)方法,这就是为什么不能只在数组上调用.toString()
正如其他人所指出的,如果您真的想避免使用array.toString(),那么可以使用循环。但是库函数是可以使用的。早在Java 1.0时代,数组上的.toString()方法是默认实现,所以
knights.split(regex).toString()
会打印出来吗
[java.lang.String@01234abcdef]
或者别的什么(我记不起确切的格式)。最终决定应该有一种很好的方法来打印数组,但是现在改变数组的行为已经太晚了
因此,java.util.array上的静态帮助器方法之一是新的.toString(array)方法,这就是为什么不能只在数组上调用.toString()
正如其他人所指出的,如果您真的想避免使用array.toString(),那么可以使用循环。但是库函数是可以使用的。程序打印内存地址的原因是因为数组的toString()方法的行为(String.split()返回字符串数组)。