Here's my submission to sort a string of characters in numeric, then lowercase, then uppercase. It may be useful, it may be not.
Function SortStringUpperLower(ByVal strString As String) As String
Try
Dim arrString() As Char = Nothing
Dim strReturn As String = String.Empty
Dim chrPrevious As Char = CChar(String.Empty)
Dim arrLower() As Char = Nothing
Dim arrUpper() As Char = Nothing
ReDim arrString(Len(strString) - 1)
arrString = strString.ToCharArray
'The string "i a 2 M 1 c D 3 ß B E 4 x g K q A m" would become "1234ABDEKMacgimqxß" on sorting the array.
Array.Sort(arrString)
Dim strNumeric As String = String.Empty
Dim strLowerCase As String = String.Empty
Dim strUpperCase As String = String.Empty
'The characters are placed in 3 seperate strings which hold either numerical or lowercase or uppercase characters.
For i = 1 To 3
For Each ch As Char In arrString
If ch.ToString <> " " Then
Select Case i
Case Is = 1 ' Only append numerical characters.
If IsNumeric(ch) Then
strNumeric += ch.ToString + " "
End If
Case Is = 2 ' Only append lower case characters.
If Asc(ch) >= 97 Then
strLowerCase += ch.ToString + " "
End If
Case Is = 3 ' Only append upper case characters.
If Asc(ch) >= 65 And Asc(ch) <= 90 Then
strUpperCase += ch.ToString + " "
End If
End Select
End If ' If ch.ToString <> " " Then
Next ' For Each ch As Char In arrString
Next ' For i = 1 to 3
'The return string need to be hold the numeric data first then the alphabet data in order (lowercase then uppercase for matching characters).
'Therefore the return string for "i a 2 M 1 c D 3 ß B E 4 x g K q A m" would become "1 2 3 4 a A B c D E g i K m M q x ß".
strReturn = strNumeric
'Position upper case character next to its lower case character.
strUpperCase = LCase(strUpperCase)
For Each chrLower As Char In strLowerCase
If chrLower.ToString <> " " Then
For Each chrUpper As Char In strUpperCase
Dim blnHasLowerChar As Boolean = False
If chrUpper.ToString <> " " Then
If Asc(chrUpper) < Asc(chrLower) Then
strReturn += UCase(chrUpper).ToString + " "
'Remove inserted character from the string containing upper case characters.
strUpperCase = Replace(strUpperCase, chrUpper.ToString, "")
End If
End If ' If chrUpper.ToString <> " " Then
Next ' For Each chrUpper As Char In strUpperCase
strReturn += chrLower.ToString + " "
End If ' If chrLower.ToString <> " " Then
Next ' For Each chrLower As Char In strLowerCase
'There maybe some uppercase characters still to append.
For Each chrUpper As Char In strUpperCase
If chrUpper.ToString <> " " Then
strReturn += chrUpper.ToString
Exit For
End If
Next
strReturn = Trim(strReturn)
SortStringUpperLower = strReturn
Catch ex As Exception
Throw
Finally
End Try
End Function