34

I'm confused a bit. I couldn't find the answer anywhere ;(

I've got an String array:

String[] arr = ["1", "2", "3"];

then I convert it to a string by:

String str = Arrays.toString(arr);
System.out.println(str);

I expected to get the string "123", but I got the string "[1,2,3]" instead.

How could I do it in java? I'm using Eclipse IDE

6
  • 1
    why not loop and concatinate each element in the array? Commented Feb 19, 2013 at 12:52
  • @LGAP This doesn't look so. Commented Feb 19, 2013 at 12:53
  • I've tried, but It didn't work in may way Commented Feb 19, 2013 at 12:53
  • 4
    And why are you storing integer values in String array? Commented Feb 19, 2013 at 12:54
  • docs.oracle.com/javase/1.5.0/docs/api/java/util/… Commented Feb 19, 2013 at 12:57

19 Answers 19

57

Use StringBuilder instead of StringBuffer, because it is faster than StringBuffer.

Sample code

String[] strArr = {"1", "2", "3"};
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < strArr.length; i++) {
   strBuilder.append(strArr[i]);
}
String newString = strBuilder.toString();

Here's why this is a better solution to using string concatenation: When you concatenate 2 strings, a new string object is created and character by character copy is performed.
Effectively meaning that the code complexity would be the order of the squared of the size of your array!

(1+2+3+ ... n which is the number of characters copied per iteration). StringBuilder would do the 'copying to a string' only once in this case reducing the complexity to O(n).

Sign up to request clarification or add additional context in comments.

5 Comments

Answer that provides only a code snippet is not very helpful. Please consider adding some comments or briefly explain what it does. :)
It's still the best answer as others use string concatenation
Use StringBuilder instead of StringBuffer. StringBuffer is thread-safe and not needed in this example.
+1 for being the fastest solution I 've tried so far!
@walv thanks walv for your great suggestion and i have modified my answer :)
16
Arrays.toString(arr);

output is [1,2,3] and you storing it to your string . and printing it so you get output [1,2,3].

If you want to get output 123 try this:

public static void main(String[] args) {
    String[] arr= {"1","2","3"};
    String output ="";
    for(String str: arr)
        output=output+str;
    System.out.println(output);


}

Output:

123

2 Comments

Please don't concatenate strings, use StringBuilder/Buffer or whatever appropriate.
I cant believe that 13 ppl actually agreed with String concatenation?! I want to double Radek - use StringBuilder instead
15

Simple answer:

Arrays.toString(arr);

1 Comment

Arrays.toString(arr) gives the result like [1,2,3].He is not required this format
9

Do it java 8 way in just 1 line:

String.join("", arr);

Comments

6

Arrays.toString: (from the API, at least for the Object[] version of it)

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(", ");
    }
}

So that means it inserts the [ at the start, the ] at the end, and the , between elements.

If you want it without those characters: (StringBuilder is faster than the below, but it can't be the small amount of code)

String str = "";
for (String i:arr)
  str += i;
System.out.println(str);

Side note:

String[] arr[3]= [1,2,3] won't compile.

Presumably you wanted: String[] arr = {"1", "2", "3"};

2 Comments

if you are concatenating really BIG strings, then you shouldn't ask i == iMax? in each iteration! Just ALWAYS add a separator and then delete the last one after the loop!
@Sauer Note that I didn't write that first code sample myself, it's a direct copy-and-paste from the Java API. Do you mean a really big array? The size of the strings won't matter for the i == iMax check. Also note that checking i == iMax is a really, really fast operation (and you need a check to determine the end of the for-loop in either way, so it may as well be there; note the for-loop does not look like this: for (int i = 0; i != iMax; i++)).
6

Use the Arrays.toString() function. It keeps your code short and readable. It uses a string builder internally, thus, it's also efficient. To get rid of the extra characters, you might chose to eliminate them using the String.replace() function, which, admittedly, reduces readability again.

String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");

This is similar to the answer of Tris Nefzger, but without the lengthy substring construction to get rid of the square brackets.

Explanation of the Regex: "|" means any of ", " and "[" and "]". The "\\" tells the Java String that we are not meaning some special character (like a new line "\n" or a tab "\t") but a real backslash "\". So instead of "\\[", the Regex interpreter reads "\[", which tells it that we mean a literal square bracket and do not want to use it as part of the Regex language (for instance, "[^3]*" denotes any number of characters, but none of them should be "3").

Comments

3

Guava has Joiner utility to resolve this issue:

Example:

String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3"

Comments

3

I have just written the following:

public static String toDelimitedString(int[] ids, String delimiter)
{
    StringBuffer strb = new StringBuffer();
    for (int id : ids)
    {
      strb.append(String.valueOf(id) + delimiter);
    }
    return strb.substring(0, strb.length() - delimiter.length());
 }

1 Comment

Since you don't need the concurrency, a StringBuilder is typically suggested over a StringBuffer. Additionally, the body of the loop should probably be strb.append(String.valueOf(id)).append(delimiter); so as to completely avoid the + on the String.
2

Arrays.toString is formatting the output (added the brackets and commas). you should implement your own method of toString.

public String toString(String[] arr){
    String result = "";
    for(String s : arr)
        result+=s;
    return result;
}

[edit] Stringbuilder is better though. see above.

Comments

2

For Spring based projects:

org.springframework.util.StringUtils.arrayToDelimitedString(Object[] arr, String delim)

For Apache Commons users, set of nice join methods:

org.apache.commons.lang.StringUtils.join(Object[] array, char separator)

Comments

2

Using Guava's Joiner (which in r18 internally uses StringBuilder)

String[]  arr= {"1","2","3"};
Joiner noSpaceJoiner = Joiner.on("");
noSpaceJoiner.join(arr))

Joiner is useful because it is thread-safe and immutable and can be reused in many places without having to duplicate code. In my opinion it also is more readable.


Using Java 8's Stream support, we can also reduce this down to a one-liner.

String concat = Stream.of(arr).collect(Collectors.joining());

Both outputs in this case are 123

Comments

2

This is a little code of convert string array to string without [ or ] or ,

String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"};

String str = Arrays.toString(strArray);
            str = str.substring(1, str.length()-1).replaceAll(",", "");
  • First convert array to string.
  • Second get text from x to y position.
  • third replace all ',' with ""

Comments

1

take a look at generic method to print all elements in an array

but in short, the Arrays.toString(arr) is just a easy way of printing the content of a primative array.

1 Comment

it is important to note that Arrays.toString(arr) does not print the array by itself...it only provides the String to be printed
1

Arrays.toString() can be used to convert String Array to String. The extra characters can be removed by using Regex expressions or simply by using replace method.

Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");

Java 8 has introduced new method for String join public static String join(CharSequence delimiter, CharSequence... elements)

String.join("", strArray);

Comments

0

Object class has toString method. All other classes extending it overrides the toString method so in for arrays also toString is overrided in this way. So if you want your output in your way you need to create your own method by which you will get your desired result.

str="";
for (Integer i:arr){
     str+=i.toString();
}

Hope this helps

refer Why does the toString method in java not seem to work for an array

Comments

0

Here is a way to do it: Arrays.toString(array).substring(1,(3*array.length-1)).replaceAll(", ","");

Here is a demo class:

package arraytostring.demo;

import java.util.Arrays;

public class Array2String {

        public static void main(String[] args) {

                String[] array = { "1", "2", "3", "4", "5", "6", "7" };
                System.out.println(array2String(array));
                // output is: 1234567
        }

        public static String array2String(String[] array) {

                return Arrays.toString(array).substring(1, (3 * array.length - 1))
                                .replaceAll(", ", "");

        }

}

Scala makes this easier, cleaner and safer:

scala> val a = Array("1", "2", "3")
a: Array[String] = Array(1, 2, 3)

scala> val aString = a.mkString
aString: String = 123

scala> println(aString)
123

Comments

0

For those who develop in Android, use TextUtils.

String items = TextUtils.join("", arr);

Assuming arr is of type String[] arr= {"1","2","3"};

The output would be 123

Comments

0

Example using Java 8.

  String[] arr = {"1", "2", "3"};
  String join = String.join("", arr);

I hope that helps

1 Comment

You need to change are to arr.
-1
String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.