我正在尝试打印String
,下面是代码:
Object[] objArr = data.get(key);
for (Object obj : objArr)
{
System.out.println(obj);
cell.setValue(obj);
}
但我在控制台中得到以下输出:
[[Ljava.lang.String;@7defb4fb]
我尝试了以下代码段:
System.out.println(Arrays.toString(objArr));
System.out.println(Arrays.asList((objArr)));
System.out.println(objArr[k]);
但所有这些都给出了类似的奇怪输出:
[[Ljava.lang.String;@7defb4fb]
[[Ljava.lang.String;@7defb4fb]
[Ljava.lang.String;@7defb4fb
如何从中获取字符串值?
**
编辑:
** 我的问题是用Java打印数组和数组。首先要认识到它的嵌套数组,因此当我尝试迭代数组并打印其元素时,它打印的是地址的地址而不是元素。
[Ljava.lang.String; @ 7defb4fb]
我的问题是将其识别为数组并再次遍历此数组以打印元素。因此这是解决方案
if (obj instanceof String[]) {
String[] strArray = (String[]) obj;
System.out.println(Arrays.toString(strArray));
// System.out.println(obj);
}
答案 0 :(得分:4)
您可以尝试instanceof
,然后施放它到String[]
。
示例代码:
String[] strArr = {"anc", "asda"};
Object[] objArr = {strArr, strArr}; // Array of String Arrays
for (Object obj : objArr) {
if (obj instanceof String[]) {
String[] strArray = (String[]) obj;
System.out.println(Arrays.toString(strArray));
// System.out.println(obj);
}
}
答案 1 :(得分:1)
您需要迭代数组并逐个打印字符串。如果单个对象是数组,那么您也需要迭代它们。
答案 2 :(得分:0)
这取决于您要添加到阵列的数据类型。即使您使用 SOP 迭代数组仍然打印对象,也会在对象的类型类上调用 toString()
方法。
因此,如果您要添加自己类的对象,请提供自定义的 toString()
方法。现在迭代数组。
default implementation of object's toString()方法将生成以下格式
的字符串getClass().getName() + '@' + Integer.toHexString(hashCode())
如果objArray包含已定义类的对象,则问题的最佳解决方案是使用Arrays.deepToString(objArray)
和自定义toString()实现。
请看下面的例子
public class ArrayPrint {
int age;
public static void main(String[] args) {
ArrayPrint obj1 = new ArrayPrint ();
obj1.age = 12;
ArrayPrint obj2 = new ArrayPrint ();
obj2.age = 15;
ArrayPrint[] ageArr = {obj1, obj2};
System.out.println(Arrays.deepToString(ageArr));
}
}
该程序的输出应为
[sfo.ArrayPrint@19f953d, sfo.ArrayPrint@1fee6fc]
但要获取实际内容,如果我将toString()方法覆盖到我的类,如下所示
public String toString ()
{
return ""+age;
}
你得到如下输出
<强> [12,15] 强>
所以你看,只有你自己的类对象有自定义toString()实现时,Arrays.deepToString()才有用。
答案 3 :(得分:0)
你需要迭代数组并打印每个元素。如果数组元素是数组,你需要迭代抛出它们你也可以通过反射或使用 {{1} }
例如: - instanceof
或if(obj instanceof int[])
答案 4 :(得分:0)
我遇到了类似的问题。发生这种情况是因为 Arrays.toString()
用于存储单独元素的对象数组,并且当数组包含另一个对象数组时它会失败,就像您的情况一样。 deepToString
可用于解决此问题。我使用 Arrays.deepToString(Object[])
将对象数组转换为字符串,然后处理结果字符串以查找特定字段。查看@polygenelubricants 在What is this: [Ljava.lang.Object;?
有关解决方案的更多详细信息,请查看 https://www.baeldung.com/java-tostring-array。