我有一个字符串如下“AaaBBBBCCCC”。
我想把这个字符串转换成一个字符串列表和一个字符串数组。
为了实现这一点,首先我做了以下操作:var list1 = Arrays.stream(input.split(" ")).toList(); System.out.println(list1);
然后,出现的是[Aaaa, Bbbb, Cccc]
。
现在轮到阵列了。
当我打印数组的类时,Java说它的类是Object(class [Ljava.lang.Object
)。
我怎样才能得到一个字符串数组而不是对象?
3条答案
按热度按时间cpjpxq1n1#
不太确定,如果我没弄错的话。
input.split(" ")
已经返回了一个字符串数组。要从这个数组创建一个List,只需要使用6tr1vspr2#
Java中的数组在内部也是一个object。
此输出的原因是
toString()
(用于输出到println
)方法在String
类中实现,而不是在Array
对象中实现。因此,使用了来自父Object
类的标准toString()
。对于类似的输出,可以使用Arrays.toString()
。jv4diomz3#
如果您有一个String,其中包含由空格分隔的单词,如
String str = "Aaaa Bbbb Cccc";
,则可以仅使用split方法来获得String数组:String[] arr = str.split(" ");
。然后可以使用List<String> list = Arrays.asList(arr);
获得一个List。但是,如果我理解正确的话,您会问为什么在使用
Arrays.stream(str.split(" ")).toArray()
时得到的是Object数组而不是String数组,这里的原因是Arrays.stream()
方法有以下实现:当数组包含基元数据类型时,可以传递int[]
、long[]
或double[]
数组。不能将其他基元数据类型(如char[]
)的任何数组作为参数传递给Arrays.stream()
。在您的情况下,您的数组包含String
类型的对象;但是,Array.stream()
的实现对任何非基元类型使用泛型数据类型T[]
。未绑定的泛型数组在运行时解析为类型Object[]
,并且无法轻松转换为任何其他类型(如String[]
)。因此,您会得到数组类型为Object[]
而不是String[]
的输出。因此,如果变量
str
包含单词,并调用System.out.println(str.split(" "));
,则会得到:[Ljava.lang.String
。但如果调用System.out.println(Arrays.stream(str.split(" ")).toArray());
,则会得到:[Ljava.lang.Object
.如果要以可读形式打印数组的元素,可以使用
Arrays.toString()
方法:System.out.println(Arrays.toString(str.split(" ")));
。这会将[Aaaa, Bbbb, Cccc]
打印到控制台。有关
Arrays.stream()
方法的不同变体,请参阅文档:Arrays (Java Platform SE 8)如果要更好地理解泛型类型的数组,请参见www.example.com上的以下资源:Creating a Generic Array in Javabaeldung.com: Creating a Generic Array in Java