2 cyl 1561316811 cyl_1561316811 于 2016.09.09 19:44 提问

java 方法compareTo 的比较方法

import java.util.Scanner;

public class CheackASNN {
public static void main(String[] args){
String str = new String();
Scanner input = new Scanner(System.in);
System.out.print("Enter a SSN :");
str = input.next();
System.out.println();

// if(str.substring(3, 4) == "-" && str.substring(6, 7) == "-"){
// System.out.println(str+"is a valid SSN");
// }
String lowBound = "000-00-0000";
String topBound = "999-99-9999";

    if(str.compareTo(lowBound) >=0  &&  str.compareTo(topBound)<=0 && str.length()==11){
        System.out.println(str+" is a valid SSN");
    }
    else{
        System.out.println(str+" is a invalid SSN");
    }
}

}

//请问这串代码中,字符串str 不在000-00-0000到999-99-9999之间吗?
//发现输入12345678912,也显示正确

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.09.10 10:23
 很好理解,因为字符串的compareTo是按照每个字符比较的,一旦某个字符比较满足条件了,就返回了。
首先,你的输入12345678912,第一个字符是1,显然大于lowBound的第一个字符0;其次,第一个字符1显然又小于topBound的第一个字符9。
而且长度是11,所以是满足你的if分支的。
字符串的比较,跟数值的比较机制是不同的,它是逐个字符比较的。如果你想按照数值的规则来判断是否在某个范围的话,应该考虑别的思路,将字符串转换成数值类型如Integer或者Long。
caozhy
caozhy   Ds   Rxr 2016.09.09 22:41

java比较字符串用equals不用==

caozhy
caozhy   Ds   Rxr 2016.09.09 22:43

而且
str.substring(6, 7)
表示从第6个下标开始取7个字符,你应该想表达str.substring(6, 1)

cyl_1561316811
cyl_1561316811   2016.09.10 10:18

substring
public String substring(int beginIndex,
int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

参数:
beginIndex - 起始索引(包括)。
endIndex - 结束索引(不包括)。
返回:
指定的子字符串。
抛出:
IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。

麻烦您看清楚这个substring方法的用处

再者这段代码我已经注释了,

为什么我不用equals 那请问您看了我的代码吗,我要求的是一个范围。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!