[英]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.