我收到此错误消息:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -6 at java.lang.String.substring(Unknown Source) at ParseTheTweet.main(ParseTheTweet.java:41)
试图运行我的程序时。在发布的代码之前有24行注释。输入的推文是:
#typ structure; #det damaged; #loc 224 left fork road (shed) (house okay); #lat 40.029854; #lng -105.391055;
public class Tweet {
public static void main(String[] args) {
Scanner theScanner = new Scanner(System.in);
String tweet, typ, det, loc, lat, lng;
System.out.println("Enter tweet here:");
tweet = theScanner.next();
int start, finish;
typ = tweet;
start = typ.indexOf("#")+ 5;
finish = typ.indexOf(";");
typ = typ.substring(start, finish);
typ = typ.trim();
tweet = tweet.substring(finish+1);
System.out.println("Type:" + "\t" + "\t" + typ);
我的代码出了什么问题?
答案 0 :(得分:1)
我能够调用类似的错误条件,其中我选择了一个正的开始子字符串,但是将-1作为我的结束子字符串。
在这种情况下,它会由您的finish
变量包含值-1引起,这意味着找不到分号。
... 的原因是因为您使用的是Scanner#next()
,只会消耗up until the next whitespace value。
扫描程序使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。
来自Scanner.next()
:
查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入。
在这种情况下,分隔符模式都是空格,因为您没有更改默认行为。
为了使事情变得更简单,请将其更改为使用nextLine()
。