0

テキスト ファイルから読み取る Java プログラムがあり、変数を 2 つの文字列 ( "text" : " と " , "date の間) の間の文字列に設定しようとしています。 : -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 を使用して String に入れ、StringBuilder に char を追加して (例として)、 @DNA のコードを使用することです。

または、私が考えることができる最良の代替手段は、のinput5.nextLine()代わりに使用するinput5.next()ことです。データが1行のみであることを考えると、これでうまくいきます。複数行の場合、それも機能しません。

于 2012-10-17T02:38:15.587 に答える
0

findInLine()以下は私にとってはうまくいきます(または少なくともエラーをスローしません)。

Philip Whitehouse がコメントで示唆しているように、あなたのテキスト行は実際には 2 行に分かれているのではないでしょうか?

各ステップで結果を出力して何が問題なのかを確認するか、デバッガーを使用して変数を調べる必要があります。

    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 に答える