Можно вот так сделать. Пример написан на kotlin.
Этот код поместит любую строку, начинающуюся с числа ниже строки, начинающейся с другого символа.
val russianCollator = Collator.getInstance(Locale("ru", "RU"))
val array = arrayListOf("Ab", "01", "Ba", "Aa", "90")
val russianCollator = Collator.getInstance(Locale("ru", "RU"))
val array_2 = array.sortedWith(
kotlin.Comparator { o1, o2 ->
if(o1.firstOrNull()?.isDigit() == true && o2.firstOrNull()?.isDigit() == false) return@Comparator 1
if(o1.firstOrNull()?.isDigit() == false && o2.firstOrNull()?.isDigit() == true) return@Comparator -1
russianCollator.compare(o1, o2)
}
)
Хотя, заявленному в описании требованию, этот код не соответствует, как минимум, символы типа ! +- и тд. будут стоять первыми