字符串比较器

原文:字符串比较器

源代码下载地址:http://www.zuidaima.com/share/1550463741938688.htm

package com.zuidaima.util;
/**
*@author www.zuidaima.com
**/
public class NumberComparator implements Comparator<Object> {
	private boolean ignoreCase = true;

	public NumberComparator() {
	}
	public NumberComparator(boolean ignoreCase) {
		this.ignoreCase = ignoreCase;
	}

	public int compare(Object obj1, Object obj2) {
		String o1 = "";
		String o2 = "";
		if (ignoreCase) {
			TSFunction c1 = (TSFunction) obj1;
			TSFunction c2 = (TSFunction) obj2;
			o1 = c1.getFunctionOrder();
			o2 = c2.getFunctionOrder();
		}
		if (o1 != null && o2 != null) {
			for (int i = 0; i < o1.length(); i++) {
				if (i == o1.length() && i < o2.length()) {
					return -1;
				} else if (i == o2.length() && i < o1.length()) {
					return 1;
				}
				char ch1 = o1.charAt(i);
				char ch2 = o2.charAt(i);
				if (ch1 >= '0' && ch2 <= '9') {
					int i1 = getNumber(o1.substring(i));
					int i2 = getNumber(o2.substring(i));
					if (i1 == i2) {
						continue;
					} else {
						return i1 - i2;
					}
				} else if (ch1 != ch2) {
					return ch1 - ch2;
				}
			}
		}
		return 0;
	}

	private int getNumber(String str) {
		int num = Integer.MAX_VALUE;
		int bits = 0;
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
				bits++;
			} else {
				break;
			}
		}
		if (bits > 0) {
			num = Integer.parseInt(str.substring(0, bits));
		}
		return num;
	}
}
时间: 2024-11-06 13:40:47

字符串比较器的相关文章

LINQ:To Objects - 如何操作字符串

LINQ 如何操作字符串 前言: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述>(90+赞) 社会反响不错,但自己却始终觉得缺点什么!“纸上得来终觉浅,绝知此事要躬行”,没错,就是实战!这次让我们一起来看看一些操作字符串的技巧,也许能引我们从不同的角度思考问题,从而走出思维的死角! LINQ 可用于查询和转换字符串和字符串集合.它对文本文件中的半结构化数据尤其有用.LINQ 查询可与传统的字符串函数和正则表达式结合使用. 例如,可以使用 Split 或 Split 方法来创建字

EffectiveJava——用函数对象表示策略

有些语言支持函数指针.代理.lambda表达式,或者支持类似的机制,允许程序把“调用特殊函数的能力”储存起来并传递这种能力.这种机制通常用于允许函数的调用者通过传入第二个函数,来指定自己的行为.比较器函数有两个参数,都是指向元素的指针.如果第一个参数所指的元素小于第二个参数所指的元素,则返回一个负整数:如果两个元素相等则返回零:如果第一个参数所指的元素大雨第二个,则返回一个正整数.通过传递不同的比较器函数,就可以获得各种不同的排列顺序.这正是策略模式的一个例子.比较器函数代表一种为元素排列的策略

Java笔记(五)

泛型:JDK1.5版本后出现的新特性.用于解决安全问题,是一个类型安全机制. 好处:将运行期间出现问题ClassCastException,转移到了编译时期.方便程序员解决问题,让运行时问题减少. 避免了强制转换麻烦.  泛型格式:通过<>来定义要操作的引用数据类型 通常在集合框架中很常见,只要见到<>就要定义泛型.当使用集合时,将集合中要存储的数据类型作为参数传递到<>即可. 泛型类定义的泛型,在整个类中都有效.如果被方法使用,那么泛型类的对象明确要操作的具体类型后,

1.2 lambda 表达式的语法

1.2 lambda 表达式的语法 还以上一节中的排序为例.我们传递代码来检查某个字符串的长度是否小于另一个字符串的长度,如下所示: Integer.compare(first.length(), second.length()) first 和second 是什么呢?它们都是字符串.Java 是一个强类型的语言,因此我们必须同时指定类型,如下: (String first, String second) -> Integer.compare(first.length(), second.len

C#排序比较

与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序.排序规范如下 IComparable接口(包括IComparable接口和IComparable<T>接口) >和<运算符 当需要实现排序算法时,使用IComparable接口.在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类实现了IComparable接口. string[] colors={"Green", "Re

java8之lambda表达式(lambda表达式语法)

到目前为止,在Java中向其他代码传递一段代码并不是很容易.你不可能将代码块到处传递.由于java是一个面向对象的语言,因此你不得不构建一个属于某个类的对象,由它的某个方法来包含所需的代码. lambda表达式帮我们解决了这个问题,可以直接传递代码块!Java中lambda表达式的格式:参数,箭头(->),以及一个表达式.示例: (String first,String second) -> Integer.compare(first.length(), second.length()) 如果

java.lang.String 类源码解读

String类定义实现了java.io.Serializable, Comparable<String>, CharSequence 三个接口:并且为final修饰. public final class String defined String由char[]数组实现 /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the strin

Java核心技术卷一 4. java接口、lambda、内部类和代理

接口 接口概念 接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义. 如果类遵从某个特定接口,那么久履行这项服务. public interface Comparable<T>{ int compareTo(T other); } 任何实现 Comparable 接口的类都需要包含 compareTo 方法,并且这个方法的参数必须是一个 T 对象,返回一个整形数值. 接口的特点: 接口中所有方法自动地属于 public,所以接口的方法不需要提供关键字 public .

Java中lambda(λ)表达式的语法

举一个排序的例子,我们传入代码来检查一个字符串是否比另一个字符串短.这里要计算: first.length() - second.length() first和second是什么?他们都是字符串.Java是一个强类型语言,所以我们还要指定他们的类型: (String first, String second) -> first.length() - second.length() lambda表达式就是一个代码块,以及必须传入代码的变量规范. 你已经见过Java中的一种lambda表达式形式:参