Java 字符排序问题
Java 字符排序问题
未专注于排序算法,而是写了一个MyString类,实现了comparable的接口,然后用Arrays的sort方法来实现排序。我觉得这道题的难度在于如果比较两个。因为大小写的关系,实现起来有点复杂。
这是类一
- import java.util.Arrays;
- /*1.对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,
- 字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”
- 能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,
- 也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,
- 也就是说a字符串要在B或b之前。*/
- public class LetterSort {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String[] str = { "dad",
- "bOod",
- "bada","Admin","Good","aete","cc","Ko","Beta","Could"};
- MyString[] strcompare = new MyString[str.length];
- for(int i = 0;i<str.length;i++){
- strcompare[i] = new MyString(str[i]);
- }
- Arrays.sort(strcompare);
- for(MyString string:strcompare){
- System.out.println(string);
- }
- }
- }
实现接口的MyString
- /*这个类是封装了一个String。实现Comparable接口。这样使得可以用Arrays的sort方法进行排序*/
- public class MyString implements Comparable<MyString> {
- private String string;
- public void setString(String string) {
- this.string = string;
- }
- public String getString() {
- return string;
- }
- //构造方法
- public MyString(String string){
- this.string = string;
- }
- //比较
- public int compareTo(MyString other) {
- // TODO Auto-generated method stub
- char[] thisarr = this.string.toCharArray(); //存储被包装 字符串的字符数组
- char[] otherarr = other.getString().toCharArray(); //存储要比较的字符串的字符数组
- /*取得循环次数,为两个字符串的长度的最小值*/
- int iterate = thisarr.length<otherarr.length?thisarr.length:otherarr.length;
- boolean mlowercase; //记录被封装的字符串循环到的字符是否为小写
- boolean olowercase; //记录要比较的字符串循环到的字符是否为小写
- char thisletter; //记录被封装的字符串循环到的字符
- char otherletter; //记录要比较的字符串循环到的字符
- /*字符串相等,则返回0*/
- if(this.getString().equals(other.getString())){
- return 0;
- }
- /*循环字符串,做比较*/
- for(int i=0;i<iterate;i++){
- mlowercase = this.isLowercase(thisarr[i]);
- olowercase = this.isLowercase(otherarr[i]);
- /*把比较字符变成大写*/
- thisletter = mlowercase?(char)(thisarr[i]-32):thisarr[i];
- otherletter = olowercase?(char)(otherarr[i]-32):otherarr[i];
- /*比较*/
- if(thisletter!=otherletter){ //比较字母大小,不相等,则取差值,字母小的在前面
- return (thisletter-otherletter);
- }else{ //字母的大写形式相同
- if(mlowercase == olowercase){ //此位置大小写形式相同,判断下一个字符;
- continue;
- }else if(mlowercase){ //被封装的字符为小写,则返回负值
- return 32;
- }else if(olowercase){ //比较字符串的字符为小写,则返回正直
- return -32;
- }
- }
- }
- /*如果循环好之后还分不出大小,则小的排在后面*/
- return (thisarr.length<otherarr.length?-1:1);
- }
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return string;
- }
- //通过码值,来判断字符是否为小写字母
- private boolean isLowercase(char ch){
- if((int)ch >=97 && (int)ch<=122){
- return true;
- }else{
- return false;
- }
- }
- }
Java 字符排序问题的更多相关文章
- 【字符编码】Java字符编码详细解答及问题探讨
一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 ...
- Java 字符编码归纳总结
String newStr = new String(oldStr.getBytes(), "UTF-8"); java中的String类是按照unicode进行编码的 ...
- Java 字符流实现文件读写操作(FileReader-FileWriter)
Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...
- 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- Java 字符终端上获取输入三种方式
http://blog.csdn.net/hongweigg/article/details/14448731 在Java 字符终端上获取输入有三种方式: 1.java.lang.System.in ...
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...
- Java 字符编码(二)Java 中的编解码
Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...
随机推荐
- NetCore1.1+Linux部署初体验
1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netco ...
- Java IO学习笔记七
System对IO的支持 System是系统的类,其中的方法都是在控制台的输入和输出,但是通过重定向也是可以对文件的输入输出 System中定义了标准输入.标准输出和错误输出流,定义如下: stati ...
- 微信小程序代开发
微信申请第三方之后可以获取授权方的很多权限,主要的是生码和待开发,生码的第三方授权之前已经写了一篇文章,最近做了小程序待开发,总结一下写下来供大家参考 注意事项:如果在调试过程中返回了错误码请到小程序 ...
- Linux编程之有限状态机FSM的理解与实现
有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.FSM是一种逻辑单元内部的一种高效编程方法,在 ...
- Java 9 揭秘(6. 封装模块)
Tips 做一个终身学习的人. 在这章节中, 主要介绍以下内容: 封装Java模块的不同格式 JAR格式增强 什么是多版本JAR 如何创建和使用多版本JAR JMOD是什么格式 如何使用jmod工具来 ...
- 【LeetCode】219. Contains Duplicate II
题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...
- 如何使用VBS脚本给在直播间授权登陆
直接上代码,看不懂说明你技术不够 set WshShell=WScript.CreateObject("WScript.Shell") Dim ie Set mouse=New S ...
- easyui框架--基础篇(一)-->数据表格datagrid(php与mysql交互)
前 言 php easyui框架--本篇学习主要是 easyui中的datagrid(数据表格)框架. 本篇学习主要通过讲解一段代码加GIF图片学习datagrid(数据表格)中的一些常用属 ...
- 简单RPC框架-业务线程池
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- SharePoint 2013 安装
步骤 1:打开提升的 SharePoint 2013 命令行管理程序 选择与您的服务器操作系统对应的过程. 在 Windows Server 2008 R2 中 单击“开始”>“所有程序”> ...