对数字(或者中文+数字)进行排序,非数组排序2
来源:互联网 发布:剑三苍云成男捏脸数据 编辑:程序博客网 时间:2024/05/04 22:03
package zza_java_tesst4;import java.util.Comparator;public class WindowsComparator implements Comparator<String> { private String str1, str2; private int pos1, pos2, len1, len2; public int compare(String s1, String s2) { str1 = s1; str2 = s2; len1 = str1.length(); len2 = str2.length(); pos1 = pos2 = 0; int result = 0; while (result == 0 && pos1 < len1 && pos2 < len2) { char ch1 = str1.charAt(pos1); char ch2 = str2.charAt(pos2); if (Character.isDigit(ch1)) { result = Character.isDigit(ch2) ? compareNumbers() : -1; } else if (Character.isLetter(ch1)) { result = Character.isLetter(ch2) ? compareOther(true) : 1; } else { result = Character.isDigit(ch2) ? 1 : Character.isLetter(ch2) ? -1 : compareOther(false); } pos1++; pos2++; } return result == 0 ? len1 - len2 : result; } private int compareNumbers() { int end1 = pos1 + 1; while (end1 < len1 && Character.isDigit(str1.charAt(end1))) { end1++; } int fullLen1 = end1 - pos1; while (pos1 < end1 && str1.charAt(pos1) == '0') { pos1++; } int end2 = pos2 + 1; while (end2 < len2 && Character.isDigit(str2.charAt(end2))) { end2++; } int fullLen2 = end2 - pos2; while (pos2 < end2 && str2.charAt(pos2) == '0') { pos2++; } int delta = (end1 - pos1) - (end2 - pos2); if (delta != 0) { return delta; } while (pos1 < end1 && pos2 < end2) { delta = str1.charAt(pos1++) - str2.charAt(pos2++); if (delta != 0) { return delta; } } pos1--; pos2--; return fullLen2 - fullLen1; } private int compareOther(boolean isLetters) { char ch1 = str1.charAt(pos1); char ch2 = str2.charAt(pos2); if (ch1 == ch2) { return 0; } if (isLetters) { ch1 = Character.toUpperCase(ch1); ch2 = Character.toUpperCase(ch2); if (ch1 != ch2) { ch1 = Character.toLowerCase(ch1); ch2 = Character.toLowerCase(ch2); } } return ch1 - ch2; }}
测试类
package zza_java_tesst4;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Test { public static void main(String[] args) { String s1 = "5"; String s6 = "10"; String s2 = "6"; String s7 = "21"; String s3 = "11"; String s8 = "33"; String s4 = "105"; String s9 = "54"; String s5 = "108"; String s10 = "23"; String s11 = "0"; String s12 = "2"; String s13 = "23"; String s14 = "6"; String s15 = "08"; String[] arr = new String[] { s1, s6, s2, s7, s3, s8, s4, s9, s5, s10, s11, s12, s13, s14, s15 }; List<String> list = new ArrayList<String>(); list.add(s1); list.add(s2); list.add(s3); list.add(s4); list.add(s5); list.add(s6); list.add(s7); list.add(s8); list.add(s9); list.add(s10); list.add(s11); list.add(s12); list.add(s13); list.add(s14); list.add(s15); // Collections.sort(list); // System.out.println(list); // MyComparator c=new MyComparator(); // Collections.sort(list, c); // System.out.println(list); WindowsComparator w = new WindowsComparator(); // Arrays.sort(list, w); Collections.sort(list, w); System.out.println(list); Arrays.sort(arr, w); for (String str : arr) { System.out.print(str + " "); } }}
0 0
- 对数字(或者中文+数字)进行排序,非数组排序2
- 对数字(或者中文+数字)进行排序,非数组排序
- 对数字进行排序
- 不用数组对四个数字进行排序
- 如何用Perl对字符串或者数字数组进行排序。 hash 按value/按keys 排序(多种方法)。
- javascript中对数组中的数字进行排序的办法
- [算法]_[对数组内的数字进行从小到大排序]
- 对数组里的字典进行数字字母排序
- 使用sort()函数对数组中的数字进行排序。
- Java中对一个数组中的数字进行排序
- java 实现对数字进行排序
- 利用指针对两个数字进行排序
- 对数字进行排序与反转
- 对字符串数字 进行排序操作
- sqlserver按'一二三四五'排序(hibernate对中文数字进行排序)
- js对数组中的数字从小到大排序
- BitSetDemo2 进行数字排序
- 数字、中文 排序方法
- 跨站点请求伪造解决方案
- iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期
- eclipse 远程调试
- TSP:旅行商问题与内存优化的动态规划
- Docker之下载镜像
- 对数字(或者中文+数字)进行排序,非数组排序2
- 穿越宋朝, 年薪 80 万的工程师身价值多少?
- python基于http协议编程:httplib,urllib和urllib2
- xcode unable to boot the simulator解决方法
- Coupons and Discounts(水题)
- 功能强大的 Vitamio 视频播放器的使用教程
- 真机调试无法安装 The application does not have a valid signature.
- 机器学习、深度学习的理论与实战入门建议整理(三)
- vector的使用