Java字母加数字组合比较大小

作者:kingxss 时间:2023-02-27 15:27:52 

针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20">"a9"。这种情况直接调用String的compareTo方法得出的结果是不是我们希望的。这个时候就需要写自己的类并且实现Comarable接口来进行比较。这个是来源一次的面试题目,但是当时只有个思路。

思路:

1.转换String为包含substring和Integer的list。(这里用String的spit方法直接拆分不知道怎么做?)

2.将list的数据进行比较。

3.如果list中的比较结果相等,再调用String的compareTo。

代码实现:


package testsource;

import java.util.ArrayList;
import java.util.List;

/**
*
* @author Waston Xu
* @date 2011-4-15 上午10:48:21
*/
public class MyString implements Comparable<MyString> {
 private final String string;
 private List<Object> list;

public MyString(String string) {
   this.string = string;
   trimString2List();
 }

private void trimString2List() {
   list = new ArrayList<Object>();
   Integer num = 0;
   StringBuffer sb = new StringBuffer();
   for (int i = 0; i < this.string.length(); i++) {
     char c = this.string.charAt(i);
     if (c > 47 && c < 58) {
       if (sb.length() != 0) {
         list.add(sb);
         sb = new StringBuffer();
       }
       num = num * 10 + (c - '0');
       continue;
     } else {
       if (num != 0) {
         list.add(num);
         num = 0;
       }
       sb.append(c);
       continue;
     }
   }
   if (sb.length() != 0) {
     list.add(sb);
     sb = new StringBuffer();
   } else if (num != 0) {
     list.add(num);
     num = 0;
   }
 }

/*
  * 在仔细的观看了String的compareTo方法后,本来打算不调用其API进行编程,
  * 但是考虑到出现"a02"和"a2"这样的情况还是使用其API中的方式解决。
  */
 private int compareToLikeString(String s) {
   int len1 = string.length();
   int len2 = s.length();
   int n = Math.min(len1, len1);
   if (n > 0) {
     int k = 0;
     while (k < n) {
       char c1 = string.charAt(k);
       char c2 = s.charAt(k);
       if (c1 != c2)
         return c1 - c2;
       k++;
     }
   }

return len1 - len2;
 }

@Override
 public int compareTo(MyString anotherString) {
   int len1 = list.size();
   int len2 = anotherString.list.size();
   int n = Math.min(len1, len2);

int mark = 0;
   if (n > 0) {
     int i = 0;
     while (i < n) {
       Object o1 = list.get(i);
       Object o2 = anotherString.list.get(i);
       if (o1 instanceof Integer && o2 instanceof Integer) {
         mark = (Integer) o1 - (Integer) o2;
       } else {
         mark = o1.toString().compareTo(o2.toString());
       }
       if (mark != 0)
         return mark;
       i++;
     }
   }
   return compareToLikeString(anotherString.string);
   //return string.compareTo(anotherString.string);
   /* 如果这样写会有个弊端就是出现"a02"和"a2"这样的情况,肯定是前面的小*/
   //return string.length() - anotherString.string.length();
 }

public static void main(String[] args) {
   String s1 = "b9c";
   String s2 = "b09c";
   MyString m1 = new MyString(s1);
   MyString m2 = new MyString(s2);

System.out.println(m1.compareTo(m2));
 }
}

查看更多Java的语法,大家可以关注:《Thinking in Java 中文手册》、《JDK 1.7 参考手册官方英文版》、《JDK 1.6 API java 中文参考手册》、《JDK 1.5 API java 中文参考手册》,也希望大家多多支持脚本之家。

标签:Java,字母,数字
0
投稿

猜你喜欢

  • C# Websocket连接实现wss协议

    2022-09-02 08:20:41
  • springboot配置aop切面日志打印过程解析

    2022-07-10 13:14:09
  • SpringBoot深入了解日志的使用

    2023-01-06 15:40:34
  • AjaxControlToolkit AjaxFileUpload 显示英文改成中文的解决方法

    2021-06-01 21:09:57
  • C#实现缩放字体的方法

    2021-08-25 23:47:51
  • C# Winform实现进度条显示

    2023-09-14 15:47:51
  • flutter升级3.7.3报错Unable to find bundled Java version解决

    2023-07-29 16:57:52
  • 改进c# 代码的五个技巧(二)

    2023-01-09 08:57:56
  • 15个顶级Java多线程面试题(附答案)

    2023-11-24 01:53:44
  • 分享java中设置代理的两种方式

    2023-10-28 10:48:52
  • IDEA的默认快捷键设置与Eclipse的常用快捷键的设置方法

    2023-04-09 18:32:40
  • JAVA关键字及作用详解

    2022-05-03 03:50:14
  • Java方法的返回值及注意事项小结

    2022-10-02 16:55:28
  • 简述Java图像倾斜方法及实例 <font color=red>原创</font>

    2023-08-16 09:38:47
  • 关于Java反编译字节码文件

    2021-10-07 01:41:32
  • 关于Spring Boot内存泄露排查的记录

    2023-06-27 18:46:19
  • Android Studio 超级简单的打包生成apk的方法

    2023-08-07 18:57:28
  • 解决FeignClient重试机制造成的接口幂等性

    2022-01-25 11:10:35
  • Jackson序列化和反序列化忽略字段操作

    2022-08-29 14:01:14
  • Java多线程死锁与资源限制操作

    2023-08-31 05:54:30
  • asp之家 软件编程 m.aspxhome.com