How to sort a string with digits and letters (letters before digits) in Java

1 Answer

0 votes
import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String input = "a1b2c3d4";
        
        // Convert the string to a character array
        Character[] chars = input.chars()
                           .mapToObj(c -> (char) c)
                           .toArray(Character[]::new);
        
        // Sort the array with a custom comparator
        Arrays.sort(chars, (a, b) -> {
            if (Character.isLetter(a) && Character.isDigit(b)) {
                return -1; // Letters come before digits
            } else if (Character.isDigit(a) && Character.isLetter(b)) {
                return 1; // Digits come after letters
            } else {
                return Character.compare(a, b); // Natural order for same type
            }
        });
        
        // Convert the sorted array back to a string
        StringBuilder sb = new StringBuilder();
        for (Character ch : chars) {
            sb.append(ch);
        }
        String sortedString = sb.toString();
        System.out.println("Sorted String: " + sortedString);
    }
}

   
   
/*
run:
   
Sorted String: abcd1234

*/

 



answered May 26, 2025 by avibootz
...