2012-02-17 6 views
0

間で動作していない...アンドロイドのstring.Split()及び/又はStringTokenizerは()これは非常に奇妙であるループ

BufferedReader br = new BufferedReader(new InputStreamReader(openFileInput("file"))); 
String s; 
while ((s = br.readLine()) != null) { 
    String[] sa = s.split("a"); 
    String a = sa[0]; 
    String b = sa[1]; 
    String c = a + "the letter a was here" + b; 
    // Do something with String c... 
} 

I [1]閉じるライン「列Bの=のSAに力を得ます; " java.lang.NullPointerException。 ループ内の 'String s'に複数の 'a'文字がありますが、これは問題ではありません。 「文字列a」は常に正しいです。 しかし、 'String b'は常に例外をスローします。 変数(sa、a、b、c)をループ外に宣言しますが、助けません。

奇妙なことに、StringTokenizerには、同じ問題があります。 それだけでループしながら同じ内... ...

StringTokenizer st = new StringTokenizer(s, "a"); 
int x = st.countTokens(); 
String a = st.nextToken(); 
String b = st.nextToken(); 
String c = a + "the letter a was here" + b; 
// Do something with String c... 

を最初のトークン/スプリットを読むことができます。 同じ問題があります。 'String a'は正確で、システムが 'String b'行になると、同じ例外/エラー/強制終了をスローします。 私は 'int x'の値をチェックするだけで、複数のトークンがあることを確認しています。また、これは問題ではありません。

WHYこのWhileループでは、分割/トークン化された文字列の最初の分割/トークンのみにアクセス/読み取り/割り当て/使用できますか?

+0

@のようなものではなく、別のトークンを試すことができますか?それが動作するかどうか教えてください –

+0

トークナイザで、bに割り当てる前にst.hasMoreToken()を使ってみましたか?それは役に立つかもしれません。 – Urban

+0

サンプル入力を使用して更新してください。あなたのロジックを試してみるとうまくいきます。 – kosa

答えて

0

「BufferedReader」に問題がある場合は、テスト用の電話機からアプリをアンインストールして、ゼロから実行するだけで問題は解決します。 'ファイル'が壊れている可能性があります。わかりません。私はこの問題に2回ぶつかり、アプリをアンインストールして再実行して両方の時間を固定しました。

関連する問題