Java中字符串可以比较大小?

evang 发布于 2012/07/07 17:35
阅读 33K+
收藏 0
例如: String a = “45”; String b ="456"; 怎么用Java进行比较啊?
加载中
0
evang
evang
除了用compareTo这个方法外,还有其它的?比如补0等等
evang
evang
我就是想知道补0是怎么比较的
情天大圣
情天大圣
都自问自答呢!
0
理工男海哥
理工男海哥

转化成数字后 再比较。

0
NineRec
NineRec
a.compareTo(b);

比较的时候,将会逐个字符来比较吧~~没有补0之类的说法,也不会转换成数字来比较

似乎还有equals比较是否相等~

0
Gmail.com
Gmail.com
compareTo直接比较会不会造成"1001比11小"的情况?
0
b
buptwhis

Comparator以及Comparable接口只是说在排序的时候,谁放在谁的前面 而已,仅此而已。String没有大小一说。你要比较个啥?

 

evang
evang
… 你看清问题再答。 compareTo只是String的一个方法,你扯到Comparator这个接口上干啥? 谁跟你说String没有比较大小的? 你不知道字符串中每个字符都有其对应的Unicode值? 还有,我要比较的是用补0的方式进行比较。
0
b
buptwhis
敢问楼主用了多久的java了? 对象怎么比较 大小?是的 , compareTo只是String的一个方法,但你知道为这个方法是实现什么的么? 又有谁能告诉我两个String哪个大,哪个小是怎么比较的么?还 unicode,我服你服死,那只是String的一个属性的一个属性,谢谢。 还补0的方式比较,我求你告诉我你要比较个啥.你要知道, 你要比较两个基本类型的数值没问题, 比如 两个整数 1 <2 这个连sb都知道,但是"1" < "2" 这也只有sb才这么认为。 说了这么多,好像我是在忽悠你是的,今天 心情不好, 发发飙而已。 我现在完全对你这问题没有兴趣了。你爱咋样认为就咋样认为吧。
evang
evang
敢问你看过API?你觉得你用了几年Java就牛了?像你这种不看问题不明就里固执己见狂妄自大的人,我服了!还有把你的嘴放干净点,别在我的贴里乱叫。就算我说错了又如何?你就这么肯定你是对的,别人说的都是sb?自以为是的东西,就算你用了几年又如何?你根本就不配当一名程序员!
0
b
buptwhis

刚来精神了,也许早上心情不好,整 得措辞有些不好。 我可以道歉。 就技术而已, 我表明如下:

对于java的对象之间,  不存在大小比较一说, 只有两个对象是不是同一个对象,用 ==来判断, 对于业务逻辑上是不是"相等", 可以用equals方法来判断 ;但是对象之间没有说谁比谁大,谁比谁小的问题,拿String来说说,"1" <"2" 或"1" > "2"等等这些是不能判断正确性的,它压根不是一个命题,这也是我一直强调 的问题, 再怎么样也是学了些java就应该知道的东西, 与api无关, 你提到的compareTo 方法只是一个方法,它只是Comparable接口的实现。Comparable接口,以及提到的Comparator接口是用来决定 两个对象 在一个容器里面,如list里面排序时谁在谁前,谁在谁后,我不知道 我有哪里没有说明白。

0
b
buptwhis
再补充一点, 你的这条评论,请你以我的角度来看
java_zf … 你看清问题再答。 compareTo只是String的一个方法,你扯到Comparator这个接口上干啥? 谁跟你说String没有比较大小的? 你不知道字符串中每个字符都有其对应的Unicode值? 还有,我要比较的是用补0的方式进行比较。

其实我们已经完全没有共同语言了,我就不该再说了,只是心情不好,又火大,忍不住再喷了几句,望 勿怪,有什么问题让大家来评理吧,我表示除了技术问题,我不再发任何的话了。

 

拾便者
拾便者
你说的Unicode值相当于只是字符串对应的一个标记值,并不是字符串的大小值,好比学生跟座号,比如小明是1号,小红是2号,你不能说小红比小明大吧
evang
evang
呵呵,我也有不对的地方。有些话说的有点过分了,请见谅。
0
小扈
小扈

我感觉你是在说对String进行转换之后的比较吧 还是比较长度啊? 不理解!

如果是转换之后的完全可以使用类似于Integer.paseInt()之类的方法来解决。而如果是长度那更简单了 直接用length就可以呀 !

小弟才接触java 谨发表一下看法

0
jdluojing
jdluojing

看看String的源码不就知道了么:


    public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }



按顺序比较字符的unicode代码点,如果字符相同则比较下一个字符。前面部分相同的两个字符串,长度大的认为大一些。

即使字符串内容是数字,实际上比较也并不是转换按字符串的字面含义自动转换成数字,如"56"转换成int类型56,而是按单个字符比较。所以如果是纯数字字符串的比较,最好是先转换为数字类型再比较。如果字符串中包含复杂字符(特殊字符,复杂汉字等),直接比较字符串往往没有意义。

返回顶部
顶部