针对字符串是数字和字母结合而进行的,如"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 {

private final String string;

private List list;

public MyString(String string) {

this.string = string;

trimString2List();

}

private void trimString2List() {

list = new ArrayList();

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显示字母数字组合_Java字母加数字组合比较大小相关推荐

  1. java 排列组合_java 高效率的排列组合算法(java实现)

    package BeanUtil; import java.util.ArrayList; import java.util.List; import com.work.core.exception. ...

  2. python输出中文加数字_python处理“#”开头加数字的html字符方法

    python如何处理""开头加数字的html字符,比如:风水这类数据. 用python抓取数据时,有时会遇到想要数据是以""开头加数字的字符,比如图中所示的这些 ...

  3. java 随机 数字 字母组合_java生成随机数字和字母组合

    import java.util.Random; public String getCharAndNumr(int length) { String val = ""; Rando ...

  4. java生成数字字母组合_java生成随机数字和字母组合

    直接上代码: import java.util.Random; public String getCharAndNumr(int length) { String val = "" ...

  5. java如何实现动态时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  6. java数字时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  7. java 显示网页gif_Java在窗口上加载显示GIF动画图像

    Java在窗口上加载显示GIF动画图像,将多个独立的GIF图像串联在一起显示,形成GIF特有的动画形式.主要代码如下: ImageIcon[] images; //用于动画的图标数组 Timer an ...

  8. java动态打jar包_java动态加载jar包

    目录结构如下. ├── main │   ├── java │   │   └── lu │   │   └── tool │   │   └── jar │   │   ├── InterfaceR ...

  9. java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版

    1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...

最新文章

  1. python库缺少pkg_resource_ImportError: No module named pkg_resources解决方案
  2. HTML元素的基本特性
  3. 电脑屏保海底世界_一款电脑桌面锁屏软件:梦幻水族馆(好多鱼)
  4. mba案例分析_MBA小组面试案例分析你会吗?打开这份攻略让你一招制胜
  5. 增加mysql的sortbuffer_Mysql设置sort_buffer_size
  6. 我在51CTO安家了。。。
  7. java面试题2021最新
  8. callback函数_小程序不同页面的异步回调,callback和promise的使用讲解
  9. vs2017 js cordova + dotnet core 开发app
  10. VB 打开文件夹,并选中指定的文件
  11. 阿里巴巴荣获年度最佳BCM创新实践奖
  12. VS中的多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)的区别
  13. 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
  14. mysql的R树_R*树
  15. SketchUp 导出 fbx文件 单位 错误
  16. LAMP兄弟连2011年上半年开班计划
  17. odac与oracle,适用于 Windows 的 64 位 Oracle Data Access Components (ODAC) | Oracle 中国
  18. kafka分布式集群的操作
  19. 学做智能车--电磁探究篇
  20. 士兵杀敌(coduck)

热门文章

  1. hadoop相关问题
  2. quartus仿真17:T触发器的时序逻辑电路
  3. 24V转5V的常规操作7812,7805,重要的是器件选型
  4. 19年全国数学建模比赛A题代码(简单的迭代思想)
  5. react-navigation createBottomTabNavigator 刷新问题
  6. spring-cloud-demo
  7. T-SQL Apply的用法
  8. BZOJ3209(luogu 4317)花神的数论题题解
  9. SpringAOP-基于@AspectJ的简单入门
  10. 向新手和不愿意尝试的童鞋推荐vim插件(转载)