0

我有一个从文本文件中读取的 Java 程序,我正在尝试将一个变量设置为两个字符串之间的字符串 - 在 "text" : " 和 " , "date 之间。我不断收到错误 'String index out of range :-3',我似乎找不到任何其他可以应用于我的代码的解决方案。

String filename5 = "C:\\Users\\Steven\\Desktop\\Tests\\wunderground
\\outputTweetsWeatherAlerts.txt";
String filename6 = filename5;

FileInputStream input_file5 = new FileInputStream(filename5);
Scanner input5 = new Scanner(input_file5);
input5.findInLine("\"id\"");
String tweetText1 = input5.next();
int startPosition = tweetText1.indexOf(": \"") + ": \"".length();  
System.out.println("Start Position: " + startPosition);

int endPosition = tweetText1.indexOf("\" , \"date", startPosition);  
System.out.println("endPosition " + endPosition);

String tweetText = tweetText1.substring(startPosition, endPosition); 
// THIS LINE CAUSES ERROR:   String index out of range: -3
System.out.println(tweetText);

我正在阅读的文本文件如下:

{ "_id" : { "$oid" : "507dc77633f77fd20f7eec96"} , "id" : 258307760112955393 , "text" : "一些随机文本" , "date" : { "$date" : ... }

任何帮助,将不胜感激!谢谢

4

2 回答 2

0

查看代码,您可能错误地使用了 Scanner。尝试打印出 tweetText1,它会给你一个空字符串。您可能会做的是保留 FileInputStream,获取文件的内容并通过使用递归 fis.read 并将 char 添加到 StringBuilder 中(例如)然后使用 @DNA 的代码。

或者我能想到的最好的替代方法是使用input5.nextLine()而不是input5.next(),因为数据只在一行中,这将起到作用。如果是多行,那也行不通。

于 2012-10-17T02:38:15.587 回答
0

以下对我有用(或至少不会引发错误),这表明findInLine()(您没有向我们展示)没有返回您认为应该返回的内容。

正如菲利普怀特豪斯在评论中所建议的那样,也许您的文本行实际上分为两行?

您需要在每个步骤中打印出结果以查看出了什么问题,或者使用调试器检查变量。

    String tweetText1 = "{ \"_id\" : { \"$oid\" : \"507dc77633f77fd20f7eec96\"} , \"id\" : 258307760112955393 , \"text\" : \"Some random text\" , \"date\" : { \"$date\" : ... }";
    int startPosition = tweetText1.indexOf(": \"") + ": \"".length();
    System.out.println(startPosition);
    int endPosition = tweetText1.indexOf("\" , \"date", startPosition);
    System.out.println(endPosition);

    String tweetText = tweetText1.substring(startPosition, endPosition);
    // THIS LINE CAUSES ERROR: String index out of range: -3
    System.out.println(tweetText);

这输出:

start
22
105
507dc77633f77fd20f7eec96"} , "id" : 258307760112955393 , "text" : "Some random text
于 2012-10-16T23:13:18.390 回答