Search code examples
javaarraysjoinseparator

Java: join array of primitives with separator


Suppose, I have an array:

int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};

And I need to join its elements using separator, for example, " - ", so as the result I should get string like this:

"1 - 2 - 3 - 4 - 5 - 6 - 7"

How could I do this?

PS: yes, I know about this and this posts, but its solutions won't work with an array of primitives.


Solution

  • Here's what I came up with. There are several ways to do this and they depend on the tools you are using.


    Using StringUtils and ArrayUtils from Commons Lang:

    int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
    String result = StringUtils.join(ArrayUtils.toObject(arr), " - ");
    

    You can't just use StringUtils.join(arr, " - "); because StringUtils doesn't have that overloaded version of method. Though, it has method StringUtils.join(int[], char).

    Works at any Java version, from 1.2.


    Using Java 8 streams:

    Something like this:

    int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
    String result = Arrays.stream(arr)
            .mapToObj(String::valueOf)
            .collect(Collectors.joining(" - "));
    

    In fact, there are lot of variations to achieve it using streams.

    Java 8's method String.join() works only with strings, so to use it you still have to convert int[] to String[].

    String[] sarr = Arrays.stream(arr).mapToObj(String::valueOf).toArray(String[]::new);
    String result = String.join(" - ", sarr);
    

    If you're stuck using Java 7 or earlier with no libraries, you could write your own utility method:

    public static String myJoin(int[] arr, String separator) {
        if (null == arr || 0 == arr.length) return "";
    
        StringBuilder sb = new StringBuilder(256);
        sb.append(arr[0]);
    
        //if (arr.length == 1) return sb.toString();
    
        for (int i = 1; i < arr.length; i++) sb.append(separator).append(arr[i]);
    
        return sb.toString();
    }
    

    Then you can do:

    int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
    String result = myJoin(arr, " - ");