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<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
, string
, list
, substring
, 数字
, 字母
比较大小
java生成数字字母组合、大小写字母加数字组合、java 字母和数字组合、js验证字母加数字组合、随机生成字母数字组合,以便于您获取更多的相关知识。

时间: 2024-08-02 07:50:33

Java字母加数字组合比较大小_java的相关文章

穷举法破解密码-MPI+VC6.0进行两台PC的并行计算,穷举法破解6-12位的密码(字母和数字组合)的MPI程序

问题描述 MPI+VC6.0进行两台PC的并行计算,穷举法破解6-12位的密码(字母和数字组合)的MPI程序 10C 需要分配任务,任务不知道怎么分配,我打算写控制台程序,先提示输入密码,用"*"显示,然后破解密码,显示密码是什么.怎么写这个程序啊,谢谢各位大神了.我在网上找了好多资料,可是估计是因为编程能力太差,实在写不出来啊.求大家帮帮忙,比较着急这个,谢谢 解决方案 我搭建好了MPI运行环境,只是遇到编程就傻了,实在编不出来,能给出程序吗?本身编程能力比较差,现在马上要交毕业设计

java控制台输出数字金字塔示例分享_java

复制代码 代码如下: /*Java  *Author: NealFeng at oschina.net *License: GPLv2+ *Time: 2014/1/17 * *在控制台输出数字金字塔: *                   1 *               1   2   1 *           1   2   4   2   1 *       1   2   4   8   4   2   1 *   1   2   4   8  16   8   4   2  

java正则表达式提取数字的方法实例_java

复制代码 代码如下: @Test    public void test33() {        String phoneString = "哈哈,13888889999";        // 提取数字        // 1        Pattern pattern = Pattern.compile("[^0-9]");        Matcher matcher = pattern.matcher(phoneString);        Strin

字母与数字如何组成一个好域名 技巧详解

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 随着互联网的发展,网站的增多,好的域名资源日益减少,就如四位数的.cn基本绝迹.难道非要向米农买米吗?下面我来说说注册域名技巧之一--怎么样用字母与数字组成一个好米. 字母与数字组合的域名一般分为两大类--"字母为主,数字为辅"和"数字为主,字母为辅".主一般在前,辅一般在后,当然也有例外的.辅助数字很

js中使用正则表达式查找字母和数字的方法

废话不多说,先看下js中使用正则查找字母和数字的方法,具体代码如下所示: <!DOCTYPE HTML> <html > <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> window.onload=function(){ localStorage.fiveData="

java生成字母数字组合的随机数示例 java生成随机数_java

复制代码 代码如下: package com.test; import java.util.Random; public class GenerateRandomNumber {  public static void main(String[] args) {   System.out.println("生成的10为随机数为:" + getCharAndNumr(10)); }  /**  * java生成随机数字和字母组合  * @param length[生成随机数的长度]  *

Java生成含字母和数字的6位随机字符串_java

本文实例为大家分享了Java生成6位随机字符串的实现代码,具体内容如下 package com.amos.tools; import java.util.ArrayList; import java.util.List; import java.util.Random; public class InvertCodeGenerator { public static void main(String[] args) { // TODO Auto-generated method stub Lis

急需-如何自动生成字母加日期再加数字的序列号

问题描述 如何自动生成字母加日期再加数字的序列号 我是菜鸟,现在在做公司的工单管理系统,每下一个工单就要向工单表中插入工单编号,编号形式为TN+当前年月日+6为从1开始自动增长的数字,其中TN是固定的 例如,插入的第一个数是:TN20130811000001 请大家帮帮忙,求源码 急需,谢谢!!! 解决方案 字符串连接可以实现这个需求 解决方案二: 字符串就是了~~~~系统时间你可以取到,自增长的你也可以自己设定的(最好是用一个SQL的方法) 这样你字符串自己组合下就好了... 解决方案三: p

求助:java 如何在不缩放图片大小而对图片加水印

问题描述 求助:java 如何在不缩放图片大小而对图片加水印 如题:java 如何在不缩放图片大小而对图片加水印,网上很多方法都是加完水印图片就被缩放了 解决方案 没回应啊,帮自己顶一下 解决方案二: 楼主解决问题了吗?我也想问这个