等爱的玫瑰简谱,微型摆线针轮减速机,防雷插座有用吗
针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20">"a9"。这种情况直接调用string的compareto方法得出的结果是不是我们希望的。这个时候就需要写自己的类并且实现comarable接口来进行比较。这个是来源一次的面试题目,但是当时只有个思路。
思路:
1.转换string为包含substring和integer的list。(这里用string的spit方法直接拆分不知道怎么做?)
2.将list的数据进行比较。
3.如果list中的比较结果相等,再调用string的compareto。
代码实现:
package testsource; import java.util.arraylist; import java.util.list; /** * * @author waston xu * @date 2011-4-15 上午10:48:21 */ public class mystring implements comparable<mystring> { private final string string; private list<object> list; public mystring(string string) { this.string = string; trimstring2list(); } private void trimstring2list() { list = new arraylist<object>(); integer num = 0; stringbuffer sb = new stringbuffer(); for (int i = 0; i < this.string.length(); i++) { char c = this.string.charat(i); if (c > 47 && c < 58) { if (sb.length() != 0) { list.add(sb); sb = new stringbuffer(); } num = num * 10 + (c - '0'); continue; } else { if (num != 0) { list.add(num); num = 0; } sb.append(c); continue; } } if (sb.length() != 0) { list.add(sb); sb = new stringbuffer(); } else if (num != 0) { list.add(num); num = 0; } } /* * 在仔细的观看了string的compareto方法后,本来打算不调用其api进行编程, * 但是考虑到出现"a02"和"a2"这样的情况还是使用其api中的方式解决。 */ private int comparetolikestring(string s) { int len1 = string.length(); int len2 = s.length(); int n = math.min(len1, len1); if (n > 0) { int k = 0; while (k < n) { char c1 = string.charat(k); char c2 = s.charat(k); if (c1 != c2) return c1 - c2; k++; } } return len1 - len2; } @override public int compareto(mystring anotherstring) { int len1 = list.size(); int len2 = anotherstring.list.size(); int n = math.min(len1, len2); int mark = 0; if (n > 0) { int i = 0; while (i < n) { object o1 = list.get(i); object o2 = anotherstring.list.get(i); if (o1 instanceof integer && o2 instanceof integer) { mark = (integer) o1 - (integer) o2; } else { mark = o1.tostring().compareto(o2.tostring()); } if (mark != 0) return mark; i++; } } return comparetolikestring(anotherstring.string); //return string.compareto(anotherstring.string); /* 如果这样写会有个弊端就是出现"a02"和"a2"这样的情况,肯定是前面的小*/ //return string.length() - anotherstring.string.length(); } public static void main(string[] args) { string s1 = "b9c"; string s2 = "b09c"; mystring m1 = new mystring(s1); mystring m2 = new mystring(s2); system.out.println(m1.compareto(m2)); } }
查看更多java的语法,大家可以关注:《》、《》、《》、《》,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论