Java字母加数字组合比较大小
作者:kingxss 发布时间:2023-02-27 15:27:52
标签: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<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 中文参考手册》,也希望大家多多支持脚本之家。


猜你喜欢
- 前言最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大
- Object是所有类的父类,也就是说java中所有的类都是直接或者间接继承自Object类。比如你随便创建一个classA,虽然没有明说,但
- 本文实例为大家分享了OpenGL绘制三次Bezier曲线的具体代码,供大家参考,具体内容如下计算公式:运行结果:代码如下:#include&
- 由于要做一个新项目,所以打算做一个简单的图片验证码。先说说思路吧:在服务端,从一个文件夹里面找出8张图片,再把8张图片合并成一张大图,在8个
- 如果需要处理的数字有许多位,就可以使用BitArray类和BitVector32结构。BitArray类位于System.Collectio
- 本文实例讲述了安卓Android6.0权限动态获取操作。分享给大家供大家参考,具体如下:众所周知 , 安卓6.0现在运用的越来越广泛 , 因
- 首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetC
- 本文实例为大家分享了C语言实现简单版三子棋的具体代码,供大家参考,具体内容如下游戏的主函数设计:1.打印出可以让玩家选择游戏开始和退出的菜单
- 本教程将介绍如何在 Spring Boot 应用程序中使用 Kafka。Kafka 是一个分布式的发布-订阅消息系统,它可以处理大量数据并提
- 本文实例讲述了Android编程实现为ListView创建上下文菜单(ContextMenu)的方法。分享给大家供大家参考,具体如下:Con
- /// <summary>/// 固定长度的随机字符串/// </summary>/// <param nam
- VSCode配置C语言环境VSCode是一款强大编辑器,开源,免费,海量插件,支持很多编程语言。其中的很多功能可以大大地提高我们的学习与工作
- 目录生成类注释生成类注解模板生成方法注释生成方法注解模板最近从eclipse转idea了,第一步当然是配置快捷键,模板等。但是!发生了一件贼
- 前言随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机
- 验证码的实现原理: 在一个Servlet中生成验证,并把验证码上的数据保存在Session,用户提交验证码之后,会提交给另外一个
- 本文实例讲述了Android实现基于滑动的SQLite数据分页加载技术。分享给大家供大家参考,具体如下:main.xml如下:<men
- Mybatis基础回顾与高级应用数据库:mysql5.7jdk:15引入依赖<!--引入依赖--> &
- 前言上篇博客我们介绍了如何创建一个spring项目,并且如何的存、取对象,介绍了相关方法,那么本篇博客将接着上篇博客的内容介绍如何更加简单的
- 实例如下:static bool CheckPowerOfTwo(ulong num){ return num > 0 &
- 前言前几天多名用户反馈同一个问题,在小新平板上无法上网课,点击上课按钮后就退回到首页了。同事了解了一下发现小新平板现在销量特别好,于是赶紧申