[原创]Java中的字符串比较,按照使用习惯进行比较
2016-03-23 19:01
543 查看
java中的字符串比较一般可以采用compareTo函数,如果a.compareTo(b)返回的是小于0的数,那么说明a的unicode编码值小于b的unicode编码值。
但是很多情况下,我们开发一款app需要结合“国情”,比如在电话本中,我们希望“李四”排在“zhangsan”的前面,但是如果采用普通的compareTo函数的字符串比较的方式,那么“zhangsan”小于“李四”,由此造成了“zhangsan”的排序先于“李四”。
解决方式是采用java提供的 Collator类。
一、原理分析:
Collator是一个抽象类,实现了Comparator和Clonable接口,Collator的构造方式有以下几种:
1.
注释中已经注明:返回一个按照用户当地排序规则的Locale作为参数,一般来说getDefault()获取的Locale就会根据中国人的使用习惯进行比较。传入getInstance(Locale)函数中,接着看此函数的实现:
2.
函数生成一个RuleBasedCollator对象,此对象继承了Collator抽象类
二、使用方法
1.工具类实现。
使用方法见下面我写的工具类:
2.对List元素进行重新排序:
3.针对两个字符串进行“本地化”比较,使用的方法是:
不要使用String自带的方法stringA.compareTo("stringB")。反之,当需要使用非“本地化”的比较方法时,需要使用的是stringA.compareTo("stringB")
但是很多情况下,我们开发一款app需要结合“国情”,比如在电话本中,我们希望“李四”排在“zhangsan”的前面,但是如果采用普通的compareTo函数的字符串比较的方式,那么“zhangsan”小于“李四”,由此造成了“zhangsan”的排序先于“李四”。
解决方式是采用java提供的 Collator类。
一、原理分析:
public abstract class Collator implements Comparator<Object>, Cloneable{}
Collator是一个抽象类,实现了Comparator和Clonable接口,Collator的构造方式有以下几种:
1.
/** * Returns a {@code Collator} instance which is appropriate for the user's default * {@code Locale}. * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". */ public static Collator getInstance() { return getInstance(Locale.getDefault()); }
注释中已经注明:返回一个按照用户当地排序规则的Locale作为参数,一般来说getDefault()获取的Locale就会根据中国人的使用习惯进行比较。传入getInstance(Locale)函数中,接着看此函数的实现:
2.
/** * Returns a {@code Collator} instance which is appropriate for {@code locale}. */ public static Collator getInstance(Locale locale) { if (locale == null) { throw new NullPointerException("locale == null"); } return new RuleBasedCollator(new RuleBasedCollatorICU(locale)); }
函数生成一个RuleBasedCollator对象,此对象继承了Collator抽象类
二、使用方法
1.工具类实现。
使用方法见下面我写的工具类:
public class CompareHelper { public static final Collator COLLATOR = Collator.getInstance(); public static final Comparator<Contact> COMPARATOR_CONTACT; static { COMPARATOR_CONTACT = new Comparator<Contact>(){ public final int compare(Contact a, Contact b){ return COLLATOR.compare(a.sortKeyString, b.sortKeyString); } }; } private CompareHelper(){} }
2.对List元素进行重新排序:
Collections.sort(contacts, CompareHelper.COMPARATOR_CONTACT);
3.针对两个字符串进行“本地化”比较,使用的方法是:
int compareRet = CompareHelper.COLLATOR.compare(stringA, stringB);
不要使用String自带的方法stringA.compareTo("stringB")。反之,当需要使用非“本地化”的比较方法时,需要使用的是stringA.compareTo("stringB")
相关文章推荐
- Java 多线程同步的五种方法
- Java——不弹起的按钮组件:JToggleButton
- Java Generics and Collections-2.4-2.5
- Java-动态传参调用kettle转换和作业
- java线程死锁问题
- spring-mvc中返回fastjson的json数据去掉null值
- java并发包CyclicBarrier
- Java核心知识点-一些基本概念
- Myeclipse 6.6解决eclipse不编译java文件,创建任何类 都提示我 一个错误信息 creation of element failed
- SpringMVC之web.xml,了解必要配置项
- SpringMVC之web.xml,了解必要配置项
- 画板项目——java
- [java]wordcount程序
- <Introduction to Java Programming> Note 01
- Java_IO
- 【JAVA开发之IO流1-1】IO流简介及输入流和输出流
- IntelliJ IDEA中怎么全局搜索替换(整个项目)(Eclipse)
- java得到-100到100之间的随机数(包括-100和100)
- struts2拦截器+过滤器
- Spring-Mongo-Data与Mongo3.2集成问题