在Java中使用lastIndexOf的子串错误

时间:2014-10-15 03:30:24

标签: java

    Scanner in = new Scanner(System.in);  

    System.out.print("Enter your range (Ex. 1 - 10): ");
    String range = in.nextLine();

    String lowerRange = range.substring(0, range.indexOf(" "));
    **String upperRange = range.substring(range.lastIndexOf(" "));**

    int lowerRangeInt = Integer.parseInt(lowerRange);
    int upperRangeInt = Integer.parseInt(upperRange);

我需要用户输入两个数字作为范围,并且需要它在同一行,所以我使用in.nextLine并将第一个范围与0索引分开,直到第一个索引为一个空格,给我较低的范围,以及我打算使用空格的最后一个索引给我上限的上限。

我的错误发生在 String upperRange = range.substring(range.lastIndexOf(“”)); 表示当它试图将其转换为int时会有一个额外的空间。

3 个答案:

答案 0 :(得分:1)

更改此

String upperRange = range.substring(range.lastIndexOf(" "));

String upperRange = range.substring(range.lastIndexOf(" ") + 1 , range.length);

答案 1 :(得分:1)

如果您只想摆脱额外的空间,可以在trim()上致电String。但是,我会使用String.split(String)一步完成。拆分空白。第一个标记是较低范围,最后一个标记是较高范围(中间的任何东西都是分隔符)。像,

String[] values = range.split("\\s+");
int lowerRangeInt = Integer.parseInt(values[0]);
int upperRangeInt = Integer.parseInt(values[values.length - 1]);

答案 2 :(得分:0)

String lowerRange = range.substring(0, range.indexOf(" "));

有效,因为起始索引(0)是包含的(随结果返回)而结束索引(range.indexOf(" ")不是

在查看

时考虑到这一点
String upperRange = range.substring(range.lastIndexOf(" "));

应该告诉我们起始索引(range.lastIndexOf(" ")包含在内,因此将包含在响应中。这就是你的空间来源。

简单的解决方案是使用range.lastIndexOf(" ") + 1

将其向上移动1