线程中的异常“main java.lang.StringIndexOutOfBoundsException:String index超出范围

时间:2014-09-14 23:54:51

标签: java eclipse

我收到此错误消息:

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);

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

我能够调用类似的错误条件,其中我选择了一个正的开始子字符串,但是将-1作为我的结束子字符串。

在这种情况下,它会由您的finish变量包含值-1引起,这意味着找不到分号。

... 的原因是因为您使用的是Scanner#next(),只会消耗up until the next whitespace value

  

扫描程序使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。

来自Scanner.next()

  

查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入。

在这种情况下,分隔符模式都是空格,因为您没有更改默认行为。

为了使事情变得更简单,请将其更改为使用nextLine()