使用子字符串从Java中的字符串中获取整数和字符?

时间:2019-10-11 12:06:17

标签: java substring

  

要求用户输入温度,然后输入数字,后跟摄氏度或华氏度的C或F。然后,程序将识别温度以及测量温度的单位-使用此数据可以告诉您“水”是固态,液态还是气态。

我尝试了以下

public static void main(String[] args) {
    Scanner myScan = new Scanner(System.in);

    System.out.print("Enter THE temp: ");
    String ent = myScan.next();


    int temp = Integer.parseInt(ent.substring(0,4));

    //char type = ent.charAt();
    //System.out.println(temp);
    // System.out.println(type);

    if (temp >= 100) {
        System.out.println("The water is gaseous");
    } else if (temp < 0) {
        System.out.println("The water is solid");
    } else {
        System.out.println("the water is liquid");
    }

}

当我将(0,4)放入temp子字符串中时,我会认为输出将是输入的前3个数字。相反,当我输入1 int或3时,出现错误“ java.lang.StringIndexOutOfBoundsException”。

4 个答案:

答案 0 :(得分:5)

似乎正在搜索超出字符串范围的字符。 代替将字符串长度硬编码为4,请使用ent.length()。

int temp = Integer.parseInt(ent.substring(0,ent.length()-1));

如果最后一个字符是F,您可能还需要一个公式才能转换为摄氏度

substring(ent.length()-1).equalsIgnoreCase("F");

答案 1 :(得分:0)

如果考虑子字符串函数,它将所有字符从beginIndex到endIndex-1,所以在这里,如果输入“ 123something”,结果将是“ 123s”,因为索引3的char是's'。 / p>

另一方面,如果仅输入“ 12c”,则子字符串将引发错误,因为索引3处没有字符。

就个人而言,我会在这里使用正则表达式,因为温度可能是1、2或5个字符,这取决于您如何编写。

答案 2 :(得分:0)

首先,询问摄氏或华氏温度,然后向用户询问单位。 http://prntscr.com/phx15j

像这样输入温度-> 50℃是错误的。

答案 3 :(得分:-1)

s.substring(begin, end)将返回一个字符串,其字符串从beginend - 1

如果要提取除最后一个字符以外的所有字符,可以使用

s.substring(0, s.length() - 1)

,只有最后一个字符可以使用

s.substring(s.length() - 1, s.length())

由于输入的字符串的长度小于java.lang.StringIndexOutOfBoundsException(在您的情况下为1 <4和3 <4),您将得到end