如何将[[Ljava.lang.String; @ 7defb4fb]转换为字符串

时间:2015-09-02 05:53:33

标签: java arrays

我正在尝试打印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);
    }

5 个答案:

答案 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} }

例如: - instanceofif(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