java字符串是字母数字组合_java_Java字母加数字组合比较大小,  针对字符串是数字和字母 - phpStudy...

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 中文参考手册》,也希望大家多多支持phpstudy。相关阅读:

MySQL 5.5.49 大内存优化配置文件优化详解

JavaScript中Function函数与Object对象的关系

firefox不显示border通过清除float便可解决

jQuery Mobile开发中日期插件Mobiscroll使用说明

使用asp.net调用谷歌地图api示例

Win10更新补丁失败后出现 无法更新正在撤销该怎么办?

如何处理小图标与文字混排的多种解决方案

jQuery平滑旋转幻灯片特效代码分享

JavaScript简单实现弹出拖拽窗口(二)

div使用margin:0px auto不居中的原因分析及解决

javaScript中两个等于号和三个等于号之间的区别介绍

Windows 10正式版之前 绝对至少还有一个新版本

Win7、Win8.1升级Win10 TH2正式版详细图文教程

margin折叠的问题探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值