2017-01-17 6 views
0

NetBeans(基本コードをテストするため)とAndroid Studio(実際のアプリケーション)を使って同じ結果を得るのと同じパイプ区切りファイルを読んでいます。ここでアンドロイドスタジオとネットビーンの入力スキャナとパースの動作が異なる

は、問題のあるコードです:

String URL = "http://.../CalendarUTF8(Dec2016).txt"; 

try { 
    java.net.URL url = new java.net.URL(URL); 
    Scanner input = new Scanner(url.openStream()); 
    int i; 
    for (i = 0; input.hasNext(); i++) { 
    String temp = input.nextLine(); 
    eventCalendar[i] = temp.split("\\|",9); 
    } 
} 
catch (java.io.IOException ex) { 
    System.out.println("IO Errors"); 
} 

コードは、NetBeansに完璧に動作します。 Android Studioで読み込まれている同じファイルが途中の入力行をランダムに分割して2行読み込みます。私はファイルをチェックし、分割された場所に隠された文字はありません。パーサを自分で書くと、うまく動作します。

+0

あなたもファイルを投稿できますか? 'Scanner s = new Scanner(input).useDelimiter(" | ");デフォルトの区切り文字は' whitespace 'なので、これを使って区切り文字を '|'に設定します。 –

+0

'useDelimiter'は' Pattern'オブジェクトを受け取ります。したがって、 '|'シンボルをエスケープする必要があります。したがって: 'スキャナs =新しいスキャナ(入力).useDelimiter(" \\ | ");' – Vusal

+0

このURLを使用してファイルを取得することができます: "http://nycjazzrecord.com/Calendar/CalendarUTF8(Dec2016).txt " –

答えて

0

問題は、forループのヘッダーにhasNext()を使用し、forループの本体でnextLine()を使用しているようです。 hasNext()をhasNextLine()に置き換えたとき、私のレコード数が一致しました。なぜか、hasNext()は何かを見て変わってはいけないと思っているのですが、それはうまくいきません。

関連する問題