字符串在Java中用parseInt拆分

时间:2013-05-22 00:50:17

标签: java split parseint

我们被要求为秒表构建一个构造函数,它采用格式为“##:##:###”的字符串,并相应地更新分钟,秒和毫秒(私有实例变量)。例如,"1:21:300"表示1分21秒300毫秒。

因此,我尝试使用string.split()parseInt配对来更新值。但是,该程序将无法编译。根据eclipse,我的构造函数具有正确的语法,但是我正在做的事情有问题。我从未实际使用splitparseInt,因此我可能会使用这些100%错误。谢谢。

    public StopWatch(String startTime){
    String [] timeArray = startTime.split(":");

    if(timeArray.length == 2){
        this.minutes = Integer.parseInt(timeArray[0]);
        this.seconds = Integer.parseInt(timeArray[1]);
        this.milliseconds = Integer.parseInt(timeArray[2]);
    }
    else if(timeArray.length == 1){
        this.minutes =  0;
        this.seconds = Integer.parseInt(timeArray[1]);
        this.milliseconds =    Integer.parseInt(timeArray[2]);              
    }
    else if(timeArray.length == 0){
        this.minutes = 0;
        this.seconds = 0;
        this.milliseconds = Integer.parseInt(timeArray[2]);             
    }
    else{
        this.minutes = 0;
        this.seconds = 0;
        this.milliseconds = 0;
    }
}

P.S。 Junit测试说“比较失败:预期0:00:000,但是20:10:008”试图做:

s = new StopWatch("20:10:8");
assertEquals(s.toString(),"20:10:008");

4 个答案:

答案 0 :(得分:2)

将toString()方法替换为:

public String toString() {
    String paddedMinutes = String.format("%02d", this.minutes);
    String paddedSeconds = String.format("%02d", this.seconds);
    String paddedMilliseconds = String.format("%03d", this.milliseconds);
    return paddedMinutes + ":" + paddedSeconds + ":" + paddedMilliseconds;
}

答案 1 :(得分:2)

正如其他答案中所提到的,长度每个都偏离1,但是你在if块中使用的索引也是关闭的;例如。如果长度为1,则唯一可用的索引为0,如果长度为2,则索引的可用值为0和1.

因此,你得到一个看起来像的构造函数:

class StopWatch {
    int minutes;
    int seconds;
    int milliseconds;

    public StopWatch(String startTime) {
        String[] timeArray = startTime.split(":");

        if (timeArray.length == 3) {
            this.minutes = Integer.parseInt(timeArray[0]);
            this.seconds = Integer.parseInt(timeArray[1]);
            this.milliseconds = Integer.parseInt(timeArray[2]);
        } else if (timeArray.length == 2) {
            this.minutes = 0;
            this.seconds = Integer.parseInt(timeArray[0]);
            this.milliseconds = Integer.parseInt(timeArray[1]);
        } else if (timeArray.length == 1) {
            this.minutes = 0;
            this.seconds = 0;
            this.milliseconds = Integer.parseInt(timeArray[0]);
        } else {
            this.minutes = 0;
            this.seconds = 0;
            this.milliseconds = 0;
        }
    }
}

答案 2 :(得分:1)

虽然Java数组是从零开始的,但它们的长度只是计算元素的数量。

因此,{1,2,3}.length将返回3

现在编写代码时,您将获得左右ArrayOutOfBounds个例外。

答案 3 :(得分:0)

if(timeArray.length == 2){

应该是:

if(timeArray.length == 3){

等等。

20:10:8分裂:将给你3的长度;)