【问题标题】:Using substrings to get integers and a character from a string in Java?使用子字符串从Java中的字符串中获取整数和字符?
【发布时间】:2020-02-08 23:06:47
【问题描述】:

要求用户输入温度,然后用户输入一个数字,后跟 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) 放在临时子字符串中时,我会认为输出将是输入的前 3 个数字。相反,当我输入 1 int 或 3 时,我得到一个错误“java.lang.StringIndexOutOfBoundsException”。

【问题讨论】:

  • 从用户输入(通过System.in)获取一行时,最好使用Scanner#nextLine(),因为这样会获取整行,而不是第一个标记。
  • btw @Kieron 你的测试数据是什么?

标签: java substring


【解决方案1】:

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

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

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

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

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

您得到java.lang.StringIndexOutOfBoundsException,因为输入的字符串的长度小于end(在您的情况下为1

【讨论】:

  • substring 被重载,其中substring(s.length() - 1)s.substring(s.length() - 1, s.length()) 相同
【解决方案2】:

看起来它正在搜索超出字符串范围的字符。 使用 ent.length() 代替将字符串长度硬编码为 4。

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

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

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

【讨论】:

  • substring(ent.length()-1) 会更容易。
  • @tom 这是另一个程序,我的实际课程作业.. "int timeCru = Integer.parseInt(cruSpec.substring(5,6));"如果我的输入是 BIDC 0 HSBCK,为什么这不起作用?我遇到了一个越​​界错误,完全超出了我的想象。
  • 扫描仪是否还在拉下一个? > myScan.next();?它可能只通过 BIDC...您应该更改为 myScan.nextLine();
  • 所有排序,伙计。感谢您的帮助。
【解决方案3】:

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

要求这样输入温度--> 50C 是错误的。

【讨论】:

  • 要求这样输入温度--> 50C 是错误的;这不是“错误”,只是比某些替代方案需要更多的编程工作。
  • 通过操作用户的输入,您可以执行上述操作,但是如果用户输入了无效数据,或者您将如何验证输入字段或您将如何进行不同类型的验证等最好将字段分开。它不是替代品,它是我的解决方案。
  • @AdalSkhan,我们可以更改输入 50C 和 [C, 50] 的验证,但我认为,我们可以通过输入样式 50C 减少用户的操作次数。因此我们可以使用输入样式 50C 并调整我们的代码以支持此输入。
  • 是的,要求一个比另一个更容易。但我面临的“挑战”,目前也被困在一个输入中。
【解决方案4】:

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

另一方面,如果只输入“12c”,子字符串会抛出错误,因为索引 3 处没有字符。

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

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多