Java数组转字符串:多种实现方法与性能对比

这是文章《将Java中的String数组转化为String类型》的第1部分(共1部分)。

今天我们将研究如何将Java字符串数组转换为字符串。有时候我们需要根据特定的要求将字符串数组转换为字符串。例如:我们想要记录数组的内容,或者我们需要将字符串数组的值转换为字符串并调用其他方法。

将Java的String数组转换为String类型

大多数情况下,我们会调用一个对象的toString()方法来获得其字符串表示形式。让我们看看在Java中调用String数组的toString()方法会发生什么。

package com.Olivia.util;

public class JavaStringArrayToString {

    public static void main(String[] args) {
        String[] strArr = new String[] {"1","2","3"};
        
        String str = strArr.toString();
        
        System.out.println("Java字符串数组转字符串 = "+str);
    }

}

上述程序产生的输出如下。这种输出的原因是因为对数组的toString()调用实际上是调用了Object超类中的toString()方法,该方法的实现如下。

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

将Java字符串数组转换为字符串的示例

那么在Java中如何将字符串数组转换为字符串呢?我们可以使用Arrays.toString方法,该方法会在每个元素上调用toString()方法,然后使用StringBuilder创建字符串。

public static String toString(Object[] a) {
    if (a == null)
        return "null";

    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

如果我们有一些特定的格式要求,我们还可以创建自己的方法将字符串数组转换为字符串。下面是一个简单的程序演示了这些方法的使用以及产生的输出。

package com.Olivia.util;

import java.util.Arrays;

public class JavaStringArrayToString {

    public static void main(String[] args) {
        String[] strArr = new String[] { "1", "2", "3" };

        String str = Arrays.toString(strArr);
        System.out.println("Java字符串数组转字符串 = " + str);

        str = convertStringArrayToString(strArr, ",");
        System.out.println("转换Java字符串数组为字符串 = " + str);

    }

    private static String convertStringArrayToString(String[] strArr, String delimiter) {
        StringBuilder sb = new StringBuilder();
        for (String str : strArr)
            sb.append(str).append(delimiter);
        return sb.substring(0, sb.length() - 1);
    }
}

如果我们直接使用数组的toString()方法,它会返回没有实际意义的数据。Java的Arrays类提供了toString(Object[] objArr)方法,它遍历数组的元素并使用它们的toString()实现来返回数组的字符串表示。这就是为什么当我们使用这个函数时,我们可以看到它打印出了数组的内容,这种方式可以用于日志记录的目的。如果你想使用特定的分隔符将String数组中的所有字符串元素组合起来,那么你可以使用convertStringArrayToString(String[] strArr, String delimiter)方法来返回组合后的字符串。

Java数组转字符串示例

现在让我们将我们的字符串数组扩展到与任何其他自定义类一起使用的字符串示例,下面是实现的方式。

package com.Olivia.util;

import java.util.Arrays;

public class JavaArrayToString {

    public static void main(String[] args) {
        A[] arr = { new A("1"), new A("2"), new A("3") };

        // 默认的toString()方法
        System.out.println(arr.toString());

        // 使用Arrays.toString()打印对象数组内容
        System.out.println(Arrays.toString(arr));

        // 将对象数组转换为字符串
        System.out.println(convertObjectArrayToString(arr, ","));
    }

    private static String convertObjectArrayToString(Object[] arr, String delimiter) {
        StringBuilder sb = new StringBuilder();
        for (Object obj : arr)
            sb.append(obj.toString()).append(delimiter);
        return sb.substring(0, sb.length() - 1);

    }

}

class A {
    private String name;

    public A(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        System.out.println("A toString()方法被调用!!");
        return this.name;
    }
}

以上Java数组转字符串示例程序产生的输出是:

[Lcom.Olivia.util.A;@7852e922
A toString()方法被调用!!
A toString()方法被调用!!
A toString()方法被调用!!
[1, 2, 3]
A toString()方法被调用!!
A toString()方法被调用!!
A toString()方法被调用!!
1,2,3

所以我们看了如何将Java String数组转换为String,然后将其扩展为与自定义对象一起使用。这就是将Java数组转换为String的全部内容。

你可以在我们的 GitHub 代码仓库中查看更多的 Java 核心示例。

参考:Java数组toString API文档

bannerAds