1

I have this ArrayList

ArrayList<Character> wrongLetters;

And this syso

System.out.println("Number of errors: " + wrongLetters.size() + " (" +  String.join("", String.valueOf(wrongLetters)) + ")");

It now prints like this

Number of errors: 9 ([X, M, S, K, B, Q, L, I, U])

But how can I make it like this

Number of errors: 9 (XMSKBQLIU)

6 Answers6

2

Java 8 or later:

final String result = wrongLetters.stream().map(String::valueOf).collect(Collectors.joining());
System.out.println("Number of errors: " + wrongLetters.size() + " (" +  result + ")");
tworogue
  • 389
  • 1
  • 6
  • 23
0

You can use wrongLetters.forEach(System.out::print); in Java 8

Mohamed Anees A
  • 4,119
  • 1
  • 22
  • 35
0

Stupid answer (just remove non-alphanumerics):

System.out.println("Number of errors: " + wrongLetters.size() + " (" + String.join("", String.valueOf(wrongLetters).replaceAll("[^A-Za-z0-9]", ""))+ ")");

One more for Java 8+:

StringJoiner joiner = new StringJoiner("");
    wrongLetters.stream().forEach(err -> joiner.add(String.valueOf(err)));
    System.out.println("Number of errors: " + wrongLetters.size() + " (" + joiner + ")");

No Java 8 (using StringBuilder):

StringBuilder sb = new StringBuilder(" (");
    for (Character character : wrongLetters) {
        sb.append(character);
    }
    sb.append(")");
    System.out.println("Number of errors: " + wrongLetters.size() + sb.toString());
Akceptor
  • 1,914
  • 3
  • 26
  • 31
0

You can do it by this way using Java 8

System.out.println(wrongLetters.stream().map(x -> x.toString()).collect(Collectors.joining()));
  • expression `.map(x -> x.toString())` could be replaced with method reference to the Object class like `map(Object::toString)`. – dbl Oct 22 '18 at 12:14
  • 1
    Hey @dbl I'm still learning Java 8. Thanks for the comment will learn from this too. – Jai Prakash Oct 22 '18 at 12:33
0

String.valueOf(wrongLetters) calls toString() on array of characters thats why it look likt this. Join is called only for one String here [X, M, S, K, B, Q, L, I, U]. You have to change ArrayList to String. Check this -> Converting ArrayList of Characters to a String?

Isnarf
  • 3
  • 2
0

make a string from the arraylist of the characters

String str = "";
for (Character c : wrongLetters) {
    str += c;
} 

then :

System.out.println("Number of errors: " + wrongLetters.size() + " (" +  String.join("", str) + ")");

or make a string builder :

StringBuilder stringBuilder= new StringBuilder(wrongLetters.size());

    for (Character c : wrongLetters) {
      stringBuilder.append(c);
    }

then:

       System.out.println("Number of errors: " + wrongLetters.size() + " (" +  String.join("", stringBuilder.toString()) + ")");
Mamun Kayum
  • 161
  • 7