字符串,整數和字母數字的集合還有像AB,A012B,CD,1,10,01,9 一些值我要排序的THEM 輸出shud是 01, 1,9,10,A012B,AB,CD 可以使用任何集合 我嘗試使用collection.sort功能 但考慮一切,串 和打印一樣01,1,10,9,A012B,AB,CD 它不是我的REQ ......請幫助如何排序具有在java中
1
A
回答
3
//捕撈技術
List<String> values = new ArrayList<String>();
values.add("AB");
values.add("A012B");
values.add("CD");
values.add("1");
values.add("10");
values.add("01");
values.add("9");
values.add("I");
Collections.sort(values, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO tweak the comparator here
try{
Integer integer1 = Integer.valueOf(o1);
Integer integer2 = Integer.valueOf(o2);
return integer1.compareTo(integer2);
}catch (java.lang.NumberFormatException e) {
return o1.compareTo(o2);
}
}
});
System.out.println(values);
}
//不夠???
//這裏是魚
public static void main(String[] args) throws Exception {
List<String> values = new ArrayList<String>();
values.add("AB");
values.add("A012B");
values.add("CD");
values.add("1");
values.add("10");
values.add("01");
values.add("9");
int maxLen = 0;
for (String string : values) {
if (string.length() > maxLen) {
maxLen = string.length();
}
}
Collections.sort(values, new MyComparator(maxLen));
System.out.println(values);
}
public static class MyComparator implements Comparator<String> {
private int maxLen;
private static final String REGEX = "[0-9]+";
public MyComparator(int maxLen) {
this.maxLen = maxLen;
}
@Override
public int compare(String obj1, String obj2) {
String o1 = obj1;
String o2 = obj2;
// both numbers
if (o1.matches("[1-9]+") && o2.matches("[1-9]+")) {
Integer integer1 = Integer.valueOf(o1);
Integer integer2 = Integer.valueOf(o2);
return integer1.compareTo(integer2);
}
// both string
if (o1.matches("[a-zA-Z]+") && o2.matches("[a-zA-Z]+")) {
return o1.compareTo(o2);
}
Pattern p = Pattern.compile(REGEX);
Matcher m1 = p.matcher(o1);
Matcher m2 = p.matcher(o2);
List<String> list = new ArrayList<String>();
while (m1.find()) {
list.add(m1.group());
}
for (String string : list) {
o1.replaceFirst(string, leftPad(string, "0", maxLen));
}
list.clear();
while (m2.find()) {
list.add(m2.group());
}
for (String string : list) {
o2.replaceFirst(string, leftPad(string, "0", maxLen));
}
return o1.compareTo(o2);
}
}
public static String leftPad(String stringToPad, String padder, Integer size) {
final StringBuilder strb = new StringBuilder(size.intValue());
final StringCharacterIterator sci = new StringCharacterIterator(padder);
while (strb.length() < (size.intValue() - stringToPad.length())) {
for (char ch = sci.first(); ch != CharacterIterator.DONE; ch = sci.next()) {
if (strb.length() < (size.intValue() - stringToPad.length())) {
strb.insert(strb.length(), String.valueOf(ch));
}
}
}
return strb.append(stringToPad).toString();
}
1
你應該實現一個比較:
給出的OBJ ECT O1和目標O2:
你第一次嘗試將它們CONVER數字和比較數字。
如果O1是數字和O2不是,那麼O2比O1
被conisdered更大如果O1是不是數字和O2是數字,那麼O1是要超過01
如果更多考慮兩者都不是數字,你把它們比作字符串。
0
首先,你寫你自己的Comparator
然後調用Collections.sort(List, Comparator)
1
您必須實現比較。我假設你所有的數據都是以字符串的形式出現的。因此默認「10」在「9」之前。你需要通過自己實現java.util.Comparator來解決這個問題。
0
User952887的答案是偉大的,除了它仍然給0,01,1,10,11,2,21,3,4,5,...等(注意10在1之後和2之前)。看看下面的鏈接,一個偉大的字母數字比較器將返回0,1,2,3,4,5,10,11,21 http://sanjaal.com/java/tag/sample-alphanumeric-sorting/唯一的問題是,它將返回0,1,01-哪個User952887的固定。
相關問題
- 1. 如何排序,並在Java
- 2. 如何排序在Java
- 3. 如何排序在Java
- 4. 如何排序具有圖像
- 5. 如何排序從具有蟒蛇
- 6. 如何在java中實現有序但未排序的priorityqueue?
- 7. 排序具有類
- 8. 如何在Java中排序子集
- 9. 如何在java中對arraylist排序
- 10. 如何在java中排序文件
- 11. 如何在java中排序屬性?
- 12. 如何排序具有多重排序條件
- 13. 如何在具有條件的Mysql中排序行?
- 14. 如何重新排序的數組在Java中未排序?
- 15. 如何在Java中查找排序排序
- 16. 排序在Java中
- 17. 排序在Java中
- 18. 排序在Java中
- 19. 如何在java中執行內存有效的數組排序?
- 20. 如何在Java程序中運行具有UI的EXE文件
- 21. 排序在Java
- 22. 排序在Java
- 23. 排序在Java
- 24. 排序在Java
- 25. 具有重複值的Java比較器排序順序
- 26. 如何在具有分組的Silverlight DataGrid上啓用排序?
- 27. 如何排序具有與逗號分隔的數字在JavaScript
- 28. 如何排序具有鍵作爲數字在Python
- 29. 我如何排序Java中的ArrayBlockingQueue?
- 30. 排序包含在Java中
我認爲,除了「I」之前我想要「01」以外,一切都很好。任何想法,我們如何能夠實現這一目標?輸出爲1,01,9,A01B,AB,CD –
我編輯了答案是否符合你的目的? – user952887
非常感謝..我真的很感謝你的努力 –