java显示字母数字组合_Java字母加数字组合比较大小
针对字符串是数字和字母结合而进行的,如"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字母加数字组合比较大小相关推荐
- java 排列组合_java 高效率的排列组合算法(java实现)
package BeanUtil; import java.util.ArrayList; import java.util.List; import com.work.core.exception. ...
- python输出中文加数字_python处理“#”开头加数字的html字符方法
python如何处理""开头加数字的html字符,比如:风水这类数据. 用python抓取数据时,有时会遇到想要数据是以""开头加数字的字符,比如图中所示的这些 ...
- java 随机 数字 字母组合_java生成随机数字和字母组合
import java.util.Random; public String getCharAndNumr(int length) { String val = ""; Rando ...
- java生成数字字母组合_java生成随机数字和字母组合
直接上代码: import java.util.Random; public String getCharAndNumr(int length) { String val = "" ...
- java如何实现动态时钟_Java实现动态数字时钟
本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...
- java数字时钟_Java实现动态数字时钟
本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...
- java 显示网页gif_Java在窗口上加载显示GIF动画图像
Java在窗口上加载显示GIF动画图像,将多个独立的GIF图像串联在一起显示,形成GIF特有的动画形式.主要代码如下: ImageIcon[] images; //用于动画的图标数组 Timer an ...
- java动态打jar包_java动态加载jar包
目录结构如下. ├── main │ ├── java │ │ └── lu │ │ └── tool │ │ └── jar │ │ ├── InterfaceR ...
- java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版
1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...
最新文章
- python库缺少pkg_resource_ImportError: No module named pkg_resources解决方案
- HTML元素的基本特性
- 电脑屏保海底世界_一款电脑桌面锁屏软件:梦幻水族馆(好多鱼)
- mba案例分析_MBA小组面试案例分析你会吗?打开这份攻略让你一招制胜
- 增加mysql的sortbuffer_Mysql设置sort_buffer_size
- 我在51CTO安家了。。。
- java面试题2021最新
- callback函数_小程序不同页面的异步回调,callback和promise的使用讲解
- vs2017 js cordova + dotnet core 开发app
- VB 打开文件夹,并选中指定的文件
- 阿里巴巴荣获年度最佳BCM创新实践奖
- VS中的多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)的区别
- 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
- mysql的R树_R*树
- SketchUp 导出 fbx文件 单位 错误
- LAMP兄弟连2011年上半年开班计划
- odac与oracle,适用于 Windows 的 64 位 Oracle Data Access Components (ODAC) | Oracle 中国
- kafka分布式集群的操作
- 学做智能车--电磁探究篇
- 士兵杀敌(coduck)