`
kingxss
  • 浏览: 973864 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

针对字符串是数字和字母结合而进行的比较

阅读更多

       针对字符串是数字和字母结合而进行的,如"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));
	}
}

 

1
1
分享到:
评论

相关推荐

    1.7编程基础之字符串(30题)--题目 有链接.pdf

    判断一个字符串是否符合C语言标识符的规则,需要检查字符是否为字母、数字或下划线,并且标识符不能以数字开头。在C++中,可以使用条件语句和字符串处理函数来实现这一功能。 以上介绍了部分题目的背景知识和涉及的...

    PHP 字符串的过滤方法

    2. **ltrim()** 和 **rtrim()**: 分别用于移除字符串左侧和右侧的空白字符。与`trim()`相比,它们更具有针对性。 3. **str_replace()**: 这是一个通用的替换函数,可以用来替换字符串中所有指定的目标字符或子串。...

    字符串数组-Matlab

    除了基本操作,MATLAB还提供了专门针对字符串数组的函数。例如,`lower`和`upper`可以将字符串转换为小写或大写,`isstrprop`可以检查字符串的属性,如是否全为字母或数字等。`findstr`用于在字符串数组中查找子串,...

    C 代码 操纵字符和字符串.rar

    在IT领域,编程语言是...这个压缩包中的源代码,很可能是针对以上知识点的实例,通过阅读和运行这些代码,可以加深对字符和字符串操作的理解,并提升编程技能。在学习过程中,结合理论与实践,是掌握这些知识的关键。

    任意汉字、数字转换为英文字母

    总之,汉字和数字转换成英文字母是编程中常见的需求,涉及到字符编码、数据类型转换、字符串操作等多种技术。掌握这些知识有助于我们更好地理解和处理与字符编码相关的各种问题,提升我们的编程技能。在实践中,我们...

    字符雨 字母雨 黑客帝国 数字雨 带源码 win32 可做屏保

    这通常涉及到使用随机数生成函数,并结合字符串库来选择和输出字符。然后,程序会设定一个定时器,定时更新屏幕上的字符位置,让它们看起来像是从上至下落下的。在Win32 API中,可能使用`CreateTimer`或`SetTimer`...

    excel函数将数字和字母分开.docx

    在Excel中,有时我们需要对单元格中的数据进行精细化处理,比如将混合了数字和字母的字符串分开,以便进一步分析或整理。本篇文章将详细介绍如何利用Excel的特定函数来实现这一目标。 首先,我们要理解问题的核心:...

    Base64文本字符串编码解码加密解密双向解析工具

    在描述中提到,此工具专注于处理文本和字符串的Base64编码和解码,而不是通常针对文件和图片的应用。在处理文本时,首先需要将文本转换为字节序列,通常是根据指定的字符编码进行,比如UTF-8。UTF-8是一种非常常见的...

    C#验证密码不能含有键盘连续字母

    正则表达式可以用来检测字符串是否符合特定的规则,比如在这里,我们需要检查密码是否包含了连续的字母或数字。在C#中,我们可以创建一个正则表达式来识别这些模式,并在用户尝试设置新密码时进行验证。 以下是一个...

    JS表单验证数字字母汉字邮箱.docx

    本篇文章将围绕"JS表单验证数字字母汉字邮箱"这一主题,详细介绍如何使用JavaScript进行表单验证,包括正则表达式(Regex)验证和VType验证。 首先,我们来看如何使用正则表达式进行验证。正则表达式是一种强大的文本...

    C程序设计实验(21-22).doc

    字符数组在C语言中是存储和操作字符串的基础,而字符串处理函数则是对字符数组进行操作的工具。 首先,字符数组的定义和赋值是基础。字符数组可以看作是一系列字符的集合,它可以在声明时初始化,也可以在程序运行...

    JS验证逗号隔开可以是中文字母数字-.pdf

    在这个例子中,`reg` 是一个正则表达式,用于匹配以中文字母数字和逗号组成的字符串。`[\u0391-\uFFE5]` 匹配Unicode范围内的中文字符,`\d` 匹配数字,`\w` 匹配字母和数字,`,` 匹配逗号。`^` 表示字符串的开始,`...

    用sql获取某字符串中的数字部分的语句

    本文将详细介绍如何使用SQL语句实现这一功能,特别是针对标题和描述中提到的场景,即查询字段中数字部分为固定值,而字母部分为定值的情况。 首先,我们可以创建一个用户自定义函数(UDF)来实现这个功能。这个函数...

    matlab开发-StringToolkits.zip.zip

    在MATLAB的众多工具包中,StringToolkits是一个专门针对字符串处理的工具箱,它提供了许多高级功能,帮助用户更便捷、灵活地进行字符串操作。本文将对StringToolkits进行深入探讨,揭示其在MATLAB开发中的重要作用。...

    字符过滤并排序

    在没有具体定义的情况下,我们可以假设有效字符是指字符串中非空格、非特殊符号的字符,主要包括字母(大写和小写)和数字。对于这样的字符串,我们的目标是筛选出这些有效字符,并进行下一步操作。 接着,我们引入...

    图片验证码的JSP文件(包含三种验证方式)

    在验证时,服务器同样会比较用户输入的字母字符串是否与原始生成的一致。 3. **数字字母混合验证**: 混合验证码结合了数字和字母,增加了更多的组合可能性,提高了安全性。生成过程与前两者相似,只是在生成字符...

    解决vue中监听input只能输入数字及英文或者其他情况的问题

    对于第一个input,开发者通过watch监听searcBarCode的数据变化,并使用JavaScript的正则表达式替换方法,将不符合要求的字符(非数字和非英文字符)替换为空字符串。正则表达式[\W]匹配任何非字母数字字符,这样就...

    afl_注册信息合规性验证

    例如,可以使用字符串处理函数进行字符截取、替换和比较,使用正则表达式类进行复杂的格式验证,以及利用条件判断语句实现逻辑控制。 在"afl_注册信息合规性验证"模块中,开发者可以通过设置逻辑型参数来调整验证...

    matlab开发-NaturalOrderRowSort

    内部可能采用了分隔数字和非数字字符的方法,对每个字符串的数字部分进行单独处理,然后结合非数字部分进行整体比较。 `natsortrows.m` 顾名思义,是对二维矩阵的行进行自然排序,它可能扩展了 `natsort.m` 的功能...

Global site tag (gtag.js) - Google Analytics