如何根据几个数字字符排序字符串

时间:2017-05-24 06:34:28

标签: java arrays sorting

和平在你身上:)。

说我有:

 ----------------------------
| Hellohowruimfindandu|  30  |
 ----------------------------
| asdjflkdsjfklajlkjlk|  25  |
 ----------------------------
| sdf8sd8f97asjdkfjldl|  33  |
 ----------------------------
| sdfajsdfklajsdlfkajd|  18  |
 ----------------------------
| dfjalsjfdaldjflsdjfl|  0   |
 ----------------------------
| Hellohowruimfindandu|  15  |
 ----------------------------
| aasdklfjaklsdjaksjdf|  13  |
 ----------------------------
| jdsflkajsdflasjdfljl|  19  |

在实际代码中,它就像:

String[] Str = new String[20];
Str[0] = "Hellohowruimfindandu"+"\u0003"+"30";
Str[1] = "asdjflkdsjfklajlkjlk"+"\u0003"+"25";
// And so on

现在我想根据它的数值对这个数组进行排序。说:

 ----------------------------
| dfjalsjfdaldjflsdjfl|  0   |
 ----------------------------
| aasdklfjaklsdjaksjdf|  13  |
 ----------------------------
| Hellohowruimfindandu|  15  |

等等;

2 个答案:

答案 0 :(得分:1)

对于此类应用程序,更有效的方法是使类具有两个属性:StringInteger。现在列出这个类对象。您可以使用Comparator类基于String(lexicographic)或Integer对此列表进行排序。

例如:

你的课应该是:

public class MyClass{
    String s;
    int value;

    MyClass(String str, int v){
        s = str;
        value = v;
    }
}

您可以按如下方式列出此课程:

ArrayList<MyClass> list = new ArrayList<>();
list.add(new MyClass("str1", val1));
list.add(new MyClass("str2", val2));
            ...

排序如下:

Collections.sort(list, (a, b) -> a.value < b.value ? -1 : a.value == b.value ? 0 : 1);

上面的代码只适用于Java8,因为它使用的是lambda表达式。请参阅以下没有lambda表达式的代码。

Collections.sort(list,new Comparator<MyClass>(){
   @Override
   public int compare(final MyClass a,MyClass b) {
     //TODO return 1 if b should be before a
     //     return -1 if a should be before b
     //     return 0 otherwise
    }
});

或者如@StutiRastogi所建议的那样,如果你不想改变你的结构,你需要解析整数,然后通过跟踪旧索引和新索引对它们进行排序,然后再根据索引对String进行排序。

答案 1 :(得分:0)

获取每个String元素的最后两个字符(如果您知道它只有2位数字),将它们解析为整数,对它们进行排序并存储索引值,然后使用该索引排序显示字符串。这是方法的概述,没有实际代码,所以你可以试一试。

如果您可以更改数组的存储方式,我可以建议使用带有String和整数的类作为成员。这样,您可以根据需要单独操作它们,并在需要时将它们连接起来。使用面向对象的方法,可以让您的生活更轻松。