Core Java: StringBuilder.reverse handles surrogate pairs, a manual loop doesn't

StringBuilder.reverse keeps a surrogate pair (a character outside the Basic Multilingual Plane) together, while a naive char-by-char reversal splits the pair and corrupts it.

Code
String s = "a" + new String(Character.toChars(0x1F600)) + "b";
StringBuilder sb = new StringBuilder(s);
String reversed = sb.reverse().toString();
System.out.println("Original length: " + s.length());
System.out.println("Correct reverse: " + reversed);
char[] chars = s.toCharArray();
StringBuilder naive = new StringBuilder();
for (int i = chars.length - 1; i >= 0; i--) {
    naive.append(chars[i]);
}
System.out.println("Naive char-swap: " + naive);
Output
Original length: 4
Correct reverse: b😀a
Naive char-swap: b??a
Advertisement
More in JAVA

Run this yourself in the Online Java Compiler, spin up a live REST API in the API Sandbox, or practise with Java interview questions.

Published 2026-09-27

© Java Coding Hub · About · Contact · Privacy · Terms