验证子字符串

时间:2014-04-14 20:53:31

标签: java substring

我有这个程序要求用户以军事时间格式输入时间。输入为XX:YY。它将XX的索引作为子字符串,将它们转换为整数,然后将它们分配给“小时”实例变量。对于“分钟”实例变量,YY也是如此。

问题在于,我在假设数据应该是假的,但是它应该在不应该的时候允许它。我知道数学和验证没有错,因为我的教授就是那个人。

例如,我输入15:78,这应该是一个错误。首先它会检查几小时:

if(hours > 23)
            {
                System.out.println(militaryTime +
                    " is not a valid miliary time." );
            }

我们可以看到小时数实际上小于或等于23,所以这是可以接受的。但是,根据分钟检查,它应该不允许分钟:

else if(minutes > 59)
            {
                System.out.println(militaryTime +
                    " is not a valid miliary time." );
            }

我的会议记录明显超过59,因此被宣布为无效。但事实并非如此。相反,它接受它并转向数学,当它转换为非军事时间时,它给了我:

Enter a miitary time using the ##:## form   15:78
1:07 AM

我认为问题依赖于我的子串工作。我仍然是初学者,但我的理论是,它并没有将Y-1和Y-2中的两个值视为一起,而是分开。 78将在一起> 59,但我不认为这是把它们放在一起。

我不知道如何根除这个问题。

这是我设置的子字符串,转换和赋值。

//SEPARATE THE STRING INTO THE HOURS
            //AND THE MINUTES, CONVERTING THEM TO
            //INTEGERS AND STORING INTO THE
            //INSTANCE VARIABLES
        hours = Integer.parseInt(militaryTime.substring(0, 1));
        minutes = Integer.parseInt(militaryTime.substring(3, 4));

1 个答案:

答案 0 :(得分:4)

Java中的substring函数排除了第二个索引。所以你想要

    hours = Integer.parseInt(militaryTime.substring(0, 2));
    minutes = Integer.parseInt(militaryTime.substring(3, 5));

引用API document

  

子字符串从指定的beginIndex开始并扩展到   索引endIndex处的字符 - 1。