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 中文参考手册》,也希望大家多多支持我们。

(0)

相关推荐

  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    代码如下所示: 复制代码 代码如下: package com.hoo.util; import java.awt.Color;  import java.awt.Font;  import java.awt.Graphics;  import java.awt.image.BufferedImage;  import java.util.Random; import javax.imageio.ImageIO;  import javax.servlet.http.HttpServletRequ

  • Java金额大小写的转换方法

    本文实例为大家分享了Java金额大小写转换的具体代码,供大家参考,具体内容如下 /** * @ClassName: NumberConvert * @Description: TODO * @date 2013-3-07 下午16:08:10 * @version V1.0 */ public class MoneyUtil { /** 大写数字 */ private static final String[] NUMBERS = { "零", "壹", "

  • JAVA读取文件夹大小的几种方法实例

    (一)单线程递归方式 复制代码 代码如下: package com.taobao.test; import java.io.File; public class TotalFileSizeSequential { public static String fileName = "C:\\Documents and Settings\\Administrator\\桌面\\monkeytalk"; // 递归方式 计算文件的大小    private long getTotalSizeO

  • 用Java将字符串的首字母转换大小写

    话不多说,直接上代码 //首字母转小写 public static String toLowerCaseFirstOne(String s){ if(Character.isLowerCase(s.charAt(0))) return s; else return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString(); } //首字母转大写 public

  • Java字母大小写转换的方法

    案例: 要求从控制台接收用户输入的一个字母,如果这个字母是小写,转换为大写:如果这个字母是大写,转换为小写:只能输入字母,如果是其他值,提示数据有误! 实现代码: import java.util.Scanner; /** * 常见字母大小写转换 * 原理: * 字符char采用的是Unicode编码的16位字符类型,其表示范围是0-65536.标准的8位ASCII字符集是Unicode * 的子集,其取值范围为0-127.大小写字母之间正好相差32 * @author Administrati

  • java实现人民币大小写转换方法分享

    复制代码 代码如下: /**     * 人民币转成大写     *      * @param value     * @return String     */    public static String hangeToBig(double value)    {        char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示        char[] vunit = { '万', '亿' }; // 段名表示        char[] digi

  • Java 大小写最快转换方式实例代码

    Java 大小写最快转换方式实例代码          这里直接给出实现代码,在代码中注释都很清楚,不多做介绍. Java代码 package io.mycat; import java.util.stream.IntStream; /** * 小写字母的 'a'=97 大写字母 A=65 更好相差32利用这个差进行大小写转换 * @author : Hpgary * @date : 2017年5月3日 10:26:26 * @mail: hpgary@qq.com * */ public cl

  • Java字母加数字组合比较大小

    针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20">"a9".这种情况直接调用String的compareTo方法得出的结果是不是我们希望的.这个时候就需要写自己的类并且实现Comarable接口来进行比较.这个是来源一次的面试题目,但是当时只有个思路. 思路: 1.转换String为包含substring和Integer的list.(这里用String的spit方法直接拆分不知道怎么

  • asp 实现检测字符串是否为纯字母和数字组合的函数

    <% '****************************** '函数:CheckString(strng) '参数:strng,待验证字符串 '作者:阿里西西 '日期:2007/7/13 '描述:检测字符串是否为纯字母和数字组合 '示例:<%=CheckString(strng)%> '****************************** Function CheckString(strng)     CheckString = true     Dim regEx, M

  • JS实现生成由字母与数字组合的随机字符串功能详解

    本文实例讲述了JS实现生成由字母与数字组合的随机字符串功能.分享给大家供大家参考,具体如下: 在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的结合 先看一下这个方式: Math.random().toString(36); 结果: 0.9kfiead48n toString后的参数规定可以是2-36之间的任意整数,不写的话默认是10(也就是十进制

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

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

  • 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[生成随机数的长度]  * @re

  • Java正则表达式过滤出字母、数字和中文

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2) 过滤出 数字 的正则表达式 [^(0-9)] (3) 过滤出 中文 的正则表达式 [^(\\u4e00-\\u9fa5)] (4) 过滤出字母.数字和中文的正则表达式 [^(a-zA-Z0-9\\u4e00-\\u9fa5)] 2.实例源码 ** * @Title:FilterStr.java * @Package:com.you.dao * @Description:Java中过滤数

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

    本文实例为大家分享了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

  • Java简单统计字符串中汉字,英文字母及数字数量的方法

    本文实例讲述了Java简单统计字符串中汉字,英文字母及数字数量的方法.分享给大家供大家参考,具体如下: package org.zhy.demo.algorithm; /** * 有一个字符串,其中包含中文字符.英文字符和数字字符,请统计和打印出各个字符的个数 * * @author Administrator * */ public class Str { public static void main(String[] args) { String str = "adasfAAADFD阿萨德

  • js随机生成字母数字组合的字符串 随机动画数字

    js随机动画生成一组随机数字 在线预览 点击下载 效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 2.将body中的代码部分拷贝到你需要的地方即可 JS生成随机的由字母数字组合的字符串 前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 Math.random().toStr

  • java从键盘输入数字并判断大小的方法

    如下所示: <span style="font-size:24px;"><span style="font-size:24px;">/* 功能:从键盘输入数字判断大小,使用面向对象的方法 */ import java.io.*; public class Demo1 { public static void main(String[] args) { Bijiao bijiao=new Bijiao(); bijiao.Bijiao(); }

随机推荐