java - 如何对字母数字字符串进行排序并更改顺序?

标签 java arrays sorting

如果问题重复,请建议我该链接,

我的代码是

 public static void main(String[] args) {
      String name ="h498y948759hrh98A722hjDF94yugerTEr892ur48y";
      char[] arr= name.toCharArray();
      Arrays.sort(arr);
      System.out.println(arr);
}

结果是

 222444457788888999999ADEFTeghhhhjrrrruuyyy

现在我想改变这种排序的顺序 ADEFT222444457788888999999eghhhhjrrrruyyy 或 eghhhhjrrrrruuyyy222444457788888999999ADEFT

所以问题是我怎样才能改变这个顺序? 如果这是错误的排序方式,请告诉我正确的排序方式。

谢谢

最佳答案

您可以创建自己的Comparator类/对象并将其传递给Arrays.sort()。不幸的是,您还需要将元素转换为Character

但是,也许最通用的方法是将每个字符视为 String 并使用 Collat​​or,如以下示例所示:

    //  Rules separated in 3 parts only for convenience
    String rules1= "< A < B < C < D < E < F < G < H < I < J < K < L < M < N < O < P < Q < R < S < T < U < V < W < X < Y < Z" ;
    String rules2= "< a < b < c < d < e < f < g < h < i < j < k < l < m < n < o < p < q < r < s < t < u < v < w < x < y < z" ;
    String rules3= "< 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9" ;
    RuleBasedCollator collator= new RuleBasedCollator(rules1+rules2+rules3) ;

    String input= "h498y948759hrh98A722hjDF94yugerTEr892ur48y" ;

    //  Bulk of the job done here
    String[] arr= input.split("") ;
    Arrays.sort(arr,1,arr.length,collator);

    //  Join back in a single string for presentation
    StringBuilder sb= new StringBuilder() ;
    for(String e: arr )
        sb.append( e );
    System.out.println(sb);

输出为

    ADEFTeghhhhjrrrruuyyy222444457788888999999

仅将排序规则更改为

    String rules1= "< 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9" ;
    String rules2= "< A,a < B,b < C,c < D,d < E,e < F,f < G,g < H,h < I,i < J,j < K,k < L,l < M,m < N,n < O,o < P,p < Q,q < R,r < S,s < T,t < U,u < V,v < W,w < X,x < Y,y < Z,z" ;
    RuleBasedCollator collator= new RuleBasedCollator(rules1+rules2) ;

输出为

    222444457788888999999ADEeFghhhhjrrrrTuuyyy

Collat​​or 的主要优点是它们允许根据其内部规则对多字符字符串进行排序。事实上,这是他们的主要用例。

相当强大,是吗? (是的,我是加拿大人,以防你没有猜到:-))

关于java - 如何对字母数字字符串进行排序并更改顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429923/

相关文章:

javascript - 当数组超过一定大小限制时,node.js 会大幅减速

javascript - 如何从该数组 Vue JS 显示 HTML

javascript - Rethinkdb 对象数组到数组对象

python - 使用 Python 对 Excel 列进行排序

java - web.xml 中映射的 Filter 实现中的 Spring 注入(inject)

java - Kafka AdminClientConfig 忽略提供的配置

java - Android 应用程序位图的替代方案

java - android volley json解析器问题

javascript - 如何搜索产品 'item type' 的数组并将其发送到名称为 'Item Type' 的工作表?

c++ - MPI_Send 发送数组地址还是数组内容