繁体   English   中英

在Java中使用lastIndexOf的子字符串错误

[英]Substring error using lastIndexOf in 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索引分离到空格的第一个索引,给我一个较低的范围,给我一个较高的范围,我打算用一个空格的最后一个索引给我一个较高的范围。

我的错误来自于字符串upperRange = range.substring(range.lastIndexOf(“”))); 说当它试图将其隐藏为一个int时有一个额外的空间。

改变这个

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

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

如果只想摆脱多余的空间,可以在String上调用trim() 但是,我将使用String.split(String)一步完成。 在空白处分割。 第一个标记是较低范围,最后一个标记是较高范围(中间的任何东西都是分隔符)。 就像是,

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

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

在考虑时要考虑到这一点

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

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

一个简单的解决方案是使用range.lastIndexOf(" ") + 1将其上移range.lastIndexOf(" ") + 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM