25 lines
748 B
Java
25 lines
748 B
Java
import java.text.BreakIterator;
|
|
|
|
public class Reverse {
|
|
/* works with Java 20+ only
|
|
* cf. https://bugs.openjdk.org/browse/JDK-8291660
|
|
*/
|
|
public static StringBuilder graphemeReverse(String text) {
|
|
BreakIterator boundary = BreakIterator.getCharacterInstance();
|
|
boundary.setText(text);
|
|
StringBuilder reversed = new StringBuilder();
|
|
int end = boundary.last();
|
|
int start = boundary.previous();
|
|
while (start != BreakIterator.DONE) {
|
|
reversed.append(text.substring(start, end));
|
|
end = start;
|
|
start = boundary.previous();
|
|
}
|
|
return reversed;
|
|
}
|
|
public static void main(String[] args) throws Exception {
|
|
String a = "as⃝df̅";
|
|
System.out.println(graphemeReverse(a)); // f̅ds⃝a
|
|
}
|
|
}
|