【问题标题】:Convert any array of any type into string将任何类型的任何数组转换为字符串
【发布时间】:2021-02-14 08:24:35
【问题描述】:

我有一个Object 类型的值。它可以是任何类型的布尔、字符串、整数、长整数等。我想将该对象转换为字符串。我确实使用toString 方法并且按预期工作。但是,有时对象可能是String[]Integer[] 等(基本上是一个数组)。问题是将它们转换为字符串时,我得到一个编码的、不可读的字符串。我使用了Arrays.toString,但它只接受数组,我的值是Object 类型,我使用了String.join(" ", value),但这需要将值类型转换为字符串,并且并非所有类型都可以转换为字符串。

不管是什么类型,有没有办法将它们转换成字符串?

注意:我知道我可以为每个值指定一个 if 语句并检查类型,但我认为这不是好方法。

【问题讨论】:

  • 与我们分享您的代码会很有帮助。您是否尝试过在循环中调用每个对象的 toString 方法?
  • 你可以检查你的对象是否是一个数组,例如。见这里:stackoverflow.com/questions/2725533/… 然后在每个元素上调用 toString 并加入它们。
  • 使用if 语句是执行此操作的唯一方法。

标签: java


【解决方案1】:

编写如下实用方法:

public static String convertToString(Object input){
    if (input instanceof Object[]) {
        // deepToString used to handle nested arrays.
        return Arrays.deepToString((Object[]) input);
    } else {
        return input.toString();
    }   
}

请注意,如果输入是int[]boolean[] 等原始数组,则第一个if 条件将被评估为false。但它适用于Integer[] 等。 如果您希望该方法适用于原始数组,则需要分别为每种类型添加条件,例如:

else if (input instanceof int[]){
    // primitive arrays cannot be nested.
    // hence Arrays.deepToString is not required.
    return Arrays.toString((Object[]) input);
}

【讨论】:

  • 请注意,此方法可能不会为嵌套数组提供预期结果(请参阅Arrays.deepToString)。
  • @Zabuzard 这是一个很好的观点。我已经更新了我的答案。
【解决方案2】:

您可以在将数组转换为列表后在数组上使用 map():

List<Integer> list = Arrays.asList(3, 6, 9, 12, 15);
list.stream().map(element -> element.toString()).collect(Collectors.toList());
String result = String.join(",", list);

使用 map() 的好处在于它具有处理和过滤数据的灵活性。

【讨论】:

  • 第二行和第一行完全一样,所以它已经过时了。特别是因为你没有将第二行的结果分配给任何东西,它直接进入垃圾箱。
  • 你不需要创建一个数组列表来流式传输它,你可以做Arrays.stream(array)
  • 有流的时候不需要String.join,也不需要先去list。可以直接在直播中使用.collect(Collectors.joining(", "))
  • 是的,有多种做事方式?
  • 那不是我的意思。关键是,现在编写的代码没有太大意义。它过于复杂,第二行绝对没用。您可以将其完全删除,并且行为不会有任何改变。
【解决方案3】:

尝试将Object类型的数组转换为字符串数组

Object[] src = { 5.6, "Rupesh", 5, "India" };   
String[] dest = new String[src.length];
for(int i = 0; i < src.length; i++){
    dest[i] = src[i].toString();
}
System.out.println(Arrays.toString(dest));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多