如何打印没有方括号的数组?

时间:2021-06-27 09:22:12

标签: java arrays string

当使用 Arrays.toString 时,为什么输出打印在方括号内?如果我不想打印方括号,我需要做什么?

Arrays.toString Output is inside square brackets!

6 个答案:

答案 0 :(得分:1)

这就是 Arrays.toString 的工作原理。如果您需要不同的行为,则必须自己编写一个方法。特别是如果您希望所有元素都用逗号分隔,您可以利用方法 String.join 来做到这一点。

答案 1 :(得分:1)

如评论中所述,您可以从 Arrays.toString 生成的结果字符串中删除括号。

但是,您可以在 String::join 或基于流的解决方案的帮助下使用任何其他分隔符简单地连接数组元素:

Integer[] arr = {1, 2, 3, 4, 5, null};
String str = Arrays.stream(arr)
        .map(Objects::toString) // use null-safe conversion
        .collect(Collectors.joining(", "));

// str = "1, 2, 3, 4, 5, null"

对于像 int[] 这样的原始值数组,必须使用 IntStream 并将其元素映射到带有 mapToObj 的字符串:

int[] arr = {1, 2, 3, 4, 5};
String str = IntStream.of(arr)
        .mapToObj(Integer::toString)
        .collect(Collectors.joining("; ")); // use semicolon

// str = "1; 2; 3; 4; 5"

答案 2 :(得分:1)

实际上,标准库提供了一个很好的类来连接带有特定分隔符、前缀和后缀的字符串。

int[] nums = {1,2,3,4,5,6};
StringJoiner stringJoiner = new StringJoiner(",", "", ""); //Delimiter, Prefix, Suffix
for (int num : nums) {
    stringJoiner.add(String.valueOf(num));
}
System.out.println(stringJoiner);

或者,如果您更喜欢流媒体:

StringJoiner stringJoiner = new StringJoiner(",", "", "");
Arrays.stream(nums).mapToObj(String::valueOf).forEach(stringJoiner::add);
System.out.println(stringJoiner);

答案 3 :(得分:0)

您可以使用 java String replaceAll 方法删除 brackets & commas
这是一个插图:

    int nums[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
    String s1 = Arrays.toString(nums);
    // Replacing all '[' , ',', ']'
    String s2 = Arrays.toString(nums).replaceAll("\\[|\\]|,", "");
        
    System.out.println( s1 );
    // [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]
    System.out.println( s2 );
    // 1 4 5 9 10 40 50 90 100 400 500 900 1000

replaceAll 方法将匹配 oldSubstring 的每个子字符串替换为与字符串中的 newSubstring 匹配的子字符串。
对于多个子字符串替换: 我们可以使用

input.replaceAll("string1|string2|string3","replacementString");

答案 4 :(得分:0)

这是 java.util.Arrays 中的 toString 方法

public static String toString(double[] 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(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

所以你可以简单地自己移除大括号:

public static String myToString(double[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "";

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

答案 5 :(得分:0)

<块引用>

可以像这样打印不带括号的数组。

import java.util.*;
class Example{
public static void printArray(int[] xr){

    for(int i=0;i<xr.length;i++){
        System.out.print(xr[i]+", ");
    }
    System.out.print("\b\b");
}
public static void main(String args[]){
    int[] ar={10,20,30,40,50,60,70};
    printArray(ar);
}

}

相关问题