Java 字符排序问题

未专注于排序算法,而是写了一个MyString类,实现了comparable的接口,然后用Arrays的sort方法来实现排序。我觉得这道题的难度在于如果比较两个。因为大小写的关系,实现起来有点复杂。

这是类一

  1. import java.util.Arrays;
  2. /*1.对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,
  3. 字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”
  4. 能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,
  5. 也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,
  6. 也就是说a字符串要在B或b之前。*/
  7. public class LetterSort {
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. String[] str = { "dad",
  11. "bOod",
  12. "bada","Admin","Good","aete","cc","Ko","Beta","Could"};
  13. MyString[] strcompare = new MyString[str.length];
  14. for(int i = 0;i<str.length;i++){
  15. strcompare[i] = new MyString(str[i]);
  16. }
  17. Arrays.sort(strcompare);
  18. for(MyString string:strcompare){
  19. System.out.println(string);
  20. }
  21. }
  22. }

实现接口的MyString

  1. /*这个类是封装了一个String。实现Comparable接口。这样使得可以用Arrays的sort方法进行排序*/
  2. public class MyString implements Comparable<MyString> {
  3. private String string;
  4. public void setString(String string) {
  5. this.string = string;
  6. }
  7. public String getString() {
  8. return string;
  9. }
  10. //构造方法
  11. public MyString(String string){
  12. this.string = string;
  13. }
  14. //比较
  15. public int compareTo(MyString other) {
  16. // TODO Auto-generated method stub
  17. char[] thisarr = this.string.toCharArray();        //存储被包装  字符串的字符数组
  18. char[] otherarr = other.getString().toCharArray(); //存储要比较的字符串的字符数组
  19. /*取得循环次数,为两个字符串的长度的最小值*/
  20. int iterate = thisarr.length<otherarr.length?thisarr.length:otherarr.length;
  21. boolean mlowercase;                                 //记录被封装的字符串循环到的字符是否为小写
  22. boolean olowercase;                                 //记录要比较的字符串循环到的字符是否为小写
  23. char    thisletter;                                 //记录被封装的字符串循环到的字符
  24. char    otherletter;                                //记录要比较的字符串循环到的字符
  25. /*字符串相等,则返回0*/
  26. if(this.getString().equals(other.getString())){
  27. return 0;
  28. }
  29. /*循环字符串,做比较*/
  30. for(int i=0;i<iterate;i++){
  31. mlowercase = this.isLowercase(thisarr[i]);
  32. olowercase = this.isLowercase(otherarr[i]);
  33. /*把比较字符变成大写*/
  34. thisletter = mlowercase?(char)(thisarr[i]-32):thisarr[i];
  35. otherletter = olowercase?(char)(otherarr[i]-32):otherarr[i];
  36. /*比较*/
  37. if(thisletter!=otherletter){               //比较字母大小,不相等,则取差值,字母小的在前面
  38. return (thisletter-otherletter);
  39. }else{                                     //字母的大写形式相同
  40. if(mlowercase == olowercase){          //此位置大小写形式相同,判断下一个字符;
  41. continue;
  42. }else if(mlowercase){                  //被封装的字符为小写,则返回负值
  43. return 32;
  44. }else if(olowercase){                  //比较字符串的字符为小写,则返回正直
  45. return -32;
  46. }
  47. }
  48. }
  49. /*如果循环好之后还分不出大小,则小的排在后面*/
  50. return (thisarr.length<otherarr.length?-1:1);
  51. }
  52. @Override
  53. public String toString() {
  54. // TODO Auto-generated method stub
  55. return string;
  56. }
  57. //通过码值,来判断字符是否为小写字母
  58. private boolean isLowercase(char ch){
  59. if((int)ch >=97 && (int)ch<=122){
  60. return true;
  61. }else{
  62. return false;
  63. }
  64. }
  65. }

Java 字符排序问题的更多相关文章

  1. 【字符编码】Java字符编码详细解答及问题探讨

    一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 ...

  2. Java 字符编码归纳总结

    String newStr = new String(oldStr.getBytes(), "UTF-8");       java中的String类是按照unicode进行编码的 ...

  3. Java 字符流实现文件读写操作(FileReader-FileWriter)

    Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...

  4. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  5. 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...

  6. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  7. Java 字符终端上获取输入三种方式

    http://blog.csdn.net/hongweigg/article/details/14448731 在Java 字符终端上获取输入有三种方式: 1.java.lang.System.in ...

  8. 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...

  9. Java 字符编码(二)Java 中的编解码

    Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...

随机推荐

  1. Docker Machine 详解

    笔者在<Docker Machine 简介>一文中简单介绍了 Docker Machine 及其基本用法,但是忽略的细节实在是太多了.比如 Docker 与 Docker Machine ...

  2. Vin码识别(车架号识别)技术,摆脱手动录入提高工作效率

    本文主题:Vin码识别(车架号识别)技术,摆脱手动录入提高工作效率 本文关键词:Vin码识别,汽车Vin码识别,车架号识别,汽车车架号识别,车代码识别,车代号识别 本文主旨:一.Vin码(车架号)在什 ...

  3. 微信js-sdk接口的使用及ios深坑

    最近再做微信公众号开发,涉及到手机上传图片和拍照的功能. 思路一:使用<input type="file" name="pic" id="pic ...

  4. java自带uuid生成

    java自带uuid生成UUID.randomUUID().toString()

  5. tcpdf导出pdf数据支持中文的解决方案

    步骤如下:1.确保你测试tcpdf能正常输出英文内容的pdf2.测试输入中文内容后显示是?的乱码或者空白分析原因,是因为我们输入的中文,tcpdf字体库并不支持,因此乱码或者空白显示 添加一个合适的字 ...

  6. 利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

    因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是 ...

  7. AngularJS模块

    方式一: <body ng-app="myApp"> <div ng-controller="myCtrl1"> <h1>{ ...

  8. “HK”的日常之ARP断网攻击

    ARP断网攻击是什么?可以吃吗?如果可以吃它好吃吗? ARP断网攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响 ...

  9. 如何使用jedis进行发布订阅

    jedis实现发布订阅,是通过让发布者和订阅者同时对某个channel(频道)进行操作,订阅者订阅了某个频道例如channel1,发布者往这个channel1里面publish东西,在pubsubli ...

  10. jzoj3760. 【BJOI2014】Euler

    题目大意: 欧拉函数  φ(n)  定义为不超过正整数 n 并且与 n 互素的整数的数目. 可以证明 φ(n) =  n ∗ ∏ (1 − 1 / pi). 其中 pi(1 <= i <= ...