`
xinklabi
  • 浏览: 1586738 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

java中文排序(使用pinyin4j)

    博客分类:
  • Java
 
阅读更多

如下比较器实现了汉字按照字母顺序进行排序,输入字符为英文字符将会排在汉字之前。可将待排序的DevelopmentGuideFolder放在list中,然后使用Collections.sort(list, new ZhongWenComparator());进行排序。

 

/**
* 汉字比较器.
*/
public static class ZhongWenComparator implements Comparator<DevelopmentGuideFolder>{
private final static Log log = LogFactory.getLog(ZhongWenComparator.class);

@Override
public int compare(DevelopmentGuideFolder df1, DevelopmentGuideFolder df2) {
char[] df1NameAry = df1.getName().toCharArray();
char[] df2NameAry = df2.getName().toCharArray();
int len1 = df1NameAry.length;
int len2 = df2NameAry.length;

//循环len1与len2较小的那个次数
for(int i = 0; i < len1 && i < len2; i++){
//都是英文字符
if(df1NameAry[i] < 128 && df2NameAry[i] < 128){
//相同字符,继续比较
if(df1NameAry[i] == df2NameAry[i])
continue;
return df1NameAry[i] - df2NameAry[i];
//都是中文(编码在128之外的按照中文处理)
}else if(df1NameAry[i] >= 128 && df2NameAry[i] >= 128){
//相同汉字,继续比较
if(df1NameAry[i] == df2NameAry[i])
continue;
return hanziToPinyin(df1NameAry[i]).compareTo(hanziToPinyin(df2NameAry[i]));
//第一个字符是汉字,第二个字符是英文字符
}else if(df1NameAry[i] >= 128){
return 1;
//第二个字符是汉字,第一个字符是英文字符
}else if(df2NameAry[i] >= 128){
return -1;
}
}

//for循环中未能比较出结果,
//说明两个字符串相同或是长一点的字符串包含短一点的字符串
if(len1 == len2)
return 0;
else if(len1 > len2)
return 1;
else
return -1;
}

public static String hanziToPinyin(char hanzi){
StringBuffer sb = new StringBuffer();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
if(hanzi > 128){
try{
sb.append(PinyinHelper.toHanyuPinyinStringArray(hanzi, defaultFormat)[0]);
}catch(BadHanyuPinyinOutputFormatCombination e){
log.info("将中文'" + hanzi + "'转换为拼音时出现异常",e);
}
}else{
sb.append(hanzi);
}

return sb.toString();
}

public static void main(String[] args){
DevelopmentGuideFolder df1 = new DevelopmentGuideFolder();
df1.setName("development");
DevelopmentGuideFolder df2 = new DevelopmentGuideFolder();
df2.setName("develop");
DevelopmentGuideFolder df3 = new DevelopmentGuideFolder();
df3.setName("推土a机斯");
DevelopmentGuideFolder df4 = new DevelopmentGuideFolder();
df4.setName("推土b机");



List<DevelopmentGuideFolder> dfList = new ArrayList<DevelopmentGuideFolder>();
dfList.add(df1);
dfList.add(df2);
dfList.add(df3);
dfList.add(df4);
Collections.sort(dfList, new ZhongWenComparator());

for(DevelopmentGuideFolder df : dfList){
System.out.println(df.getName());
}


}

}

public class DevelopmentGuideFolder implements Serializable{

private static final long serialVersionUID = 1L;

private String id;
private String name;
private DevelopmentGuideFolder parent;
private List<DevelopmentGuideFolder> children;
private List<DevelopmentGuide> developmentGuideList;
private List<User> relatedUsers;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public DevelopmentGuideFolder getParent() {
return parent;
}
public void setParent(DevelopmentGuideFolder parent) {
this.parent = parent;
}
public List<DevelopmentGuideFolder> getChildren() {
return children;
}
public void setChildren(List<DevelopmentGuideFolder> children) {
this.children = children;
}
public List<DevelopmentGuide> getDevelopmentGuideList() {
return developmentGuideList;
}
public void setDevelopmentGuideList(List<DevelopmentGuide> developmentGuideList) {
this.developmentGuideList = developmentGuideList;
}
public void setRelatedUsers(List<User> relatedUsers) {
this.relatedUsers = relatedUsers;
}
public List<User> getRelatedUsers() {
return relatedUsers;
}

}

分享到:
评论

相关推荐

    Java 中文排序 使用pinyin4j组件

    这里我们将详细介绍如何使用`pinyin4j`这个Java库来实现中文字符串的拼音排序。 `pinyin4j`是一个强大的Java库,它提供了将汉字转换为拼音的功能,这使得我们可以基于每个汉字的拼音首字母来进行排序。以下是如何...

    pinyin4j.zip pinyin4j.jar

    总的来说,Pinyin4j是一个功能强大且易于使用的汉字转拼音工具,无论是Java还是Android开发者,都能从中受益。通过它的帮助,我们可以更便捷地进行汉字与拼音之间的转换,进一步推动中文信息处理技术的发展。在实际...

    pinyin4j-2.5.0.jar 下载 java汉字转拼音 jar包 附带超级简单小dome

    在Java编程语言中,pinyin4j是一个非常实用的库,它能将汉字转换为拼音,从而解决了在处理汉字排序、分类、搜索等需求时遇到的问题。本文将详细介绍pinyin4j-2.5.0.jar这个jar包以及如何使用它来实现汉字转拼音的...

    pinyin4j-2.5.0

    5. **性能优化**:`pinyin4j`在设计时考虑了性能,其内部使用了高效的哈希映射和数据结构,确保在处理大量汉字时仍能保持较高的效率。 使用`pinyin4j-2.5.0`,开发者只需简单导入库,然后通过API调用来实现汉字到...

    使用pinyin4j实现中文全拼例子netbeans

    在这个"使用pinyin4j实现中文全拼例子netbeans"项目中,我们将探讨如何在NetBeans集成开发环境下利用pinyin4j库来实现中文到全拼的转换。 `pinyin4j`是由Barry De Zwart开发的开源项目,它提供了简单易用的API,...

    pinyin4j 拼音排序

    《使用pinyin4j进行汉字拼音排序的深度解析》 在中文信息处理中,有时候我们需要对汉字进行排序,而按照汉字本身的顺序排列可能并不符合我们的实际需求,这时,我们可以利用汉字的拼音首字母进行排序,使得排序结果...

    pinyin4j-2.5.0.jar下载

    "pinyin4j-2.5.0.jar"就是这样一款高效且易用的工具,它专为Java和Kotlin设计,提供了强大的汉字转拼音功能。 pinyin4j是一款开源的Java库,由Barry De Zwart开发,其主要功能是将汉字转换为汉语拼音。这个库不仅...

    Pinyin4j简单使用教程

    在Java开发中,如果需要将汉字转化为拼音,例如在搜索、排序或国际化(i18n)场景下,Pinyin4j就显得尤为实用。本文将详细介绍如何在Java项目中集成和使用Pinyin4j。 一、安装与引入 首先,你需要将Pinyin4j库添加...

    中文转拼音工具类,pinyin4j-2.5.0.jar 适用于地址人名

    pinyin4j是一个专门用于Java平台的开源库,它提供了方便的API,能够帮助开发者快速实现中文到拼音的转换。在处理地址和人名等特定场景下,pinyin4j-2.5.0.jar表现出了极高的实用价值。 pinyin4j-2.5.0.jar是pinyin4...

    汉字转拼音大小写全拼首字母pinyin4j-jar

    pinyin4j是一个广泛使用的Java库,专门用于实现这个功能。本文将深入探讨pinyin4j-jar这个工具,介绍其主要功能、使用方法以及如何将其应用于实际项目中。 首先,我们要理解“汉字转拼音”的基本概念。汉字转拼音是...

    java拼音搜索pinyin4j

    总的来说,"java拼音搜索pinyin4j"这个项目结合了Java Web开发的基础知识和汉字拼音处理的专业工具,通过Servlet三层架构实现了一个高效的中文搜索功能。开发者可以在这个基础上进一步扩展,如增加拼音排序、语音...

    java中文排序,数字字母汉字排序

    一种常见的方式是使用第三方库,如`pinyin4j`,它可以帮助我们将中文字符转换为拼音。 以下是使用`pinyin4j`库实现的示例代码: ```java import net.sourceforge.pinyin4j.PinyinHelper; import ...

    pinyin4j 开发jar包

    pinyin4j,作为一个强大的Java库,专门用于解决这个问题,它使得开发者能够在Java应用程序中轻松实现汉字到拼音的转换。本文将详细介绍pinyin4j的核心功能、使用方法及其在实际开发中的应用。 一、pinyin4j简介 ...

    pinyin4j-2.5.0.jar

    《pinyin4j-2.5.0.jar与PinyinUtils.java:Java汉字转拼音的高效工具》 在Java开发中,处理汉字转拼音的需求时常出现,例如在搜索引擎优化、关键词提取、排序等方面。这时,一个高效且易用的库就显得尤为重要。...

    net.sourceforge.pinyin4j.zip

    标签中的“字符转码”是指Pinyin4j能够处理汉字与拼音之间的编码转换,而“中文转汉字”则强调了它的主要功能——将汉字转换为对应的拼音形式。通过Pinyin4j,开发者无需深入理解复杂的汉字拼音规则,只需简单调用...

    pinyin4j-2.5.0.zip

    对于Java开发者来说,pinyin4j是一个不可或缺的工具包,它专门用于将汉字转换为拼音,从而解决了中文数据处理中的诸多问题。pinyin4j-2.5.0.zip这个压缩包便是这一强大工具的载体,包含了一切你需要的功能,以适应...

    pinyin4j的使用代码实例

    《使用pinyin4j进行汉字拼音处理的代码实践》 在Java编程中,处理汉字的拼音转换是一项常见的任务,尤其在实现搜索、排序或者输入法等应用时。pinyin4j是一个优秀的开源库,它提供了方便快捷的方法来将汉字转换为...

    pinyin4j-2.5.1.jar

    在Java开发中,处理中文字符转化为拼音是一项常见的任务,这时我们常常会使用到pinyin4j这个开源库。然而,如果在项目中遇到"The import net.sourceforge.pinyin4j cannot be resolved"的异常,这通常意味着pinyin4j...

    pinyin4j拼音java

    《使用pinyin4j进行Java拼音处理》 在Java编程中,处理汉字转换为拼音的需求时常出现,特别是在信息检索、关键词提取、文本分析等领域。这时,一个强大的库——pinyin4j,便能发挥出其独特的作用。pinyin4j是一款...

Global site tag (gtag.js) - Google Analytics