7

了解しました...この.txtファイル(UTF-8)があります

4661,SOMETHING,3858884120607,24,24.09
4659,SOMETHING1,3858884120621,24,15.95
4660,SOMETHING2,3858884120614,24,19.58

そしてこのコード

FileInputStream fis = new FileInputStream(new File(someTextFile.txt));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);

int i = 0;
String line;
while((line = in.readLine()) != null) {
Pattern p = Pattern.compile(",");
String[] article = p.split(line);

// I don't know why but when a first line starts with
// an integer - article[0] (which in .txt file is 4661)
// becomes someWeirdCharacter4661 so I need to trim it
// *weird character is like |=>|

if (i == 0) {
    StringBuffer articleCode = new StringBuffer(article[0]);
    articleCode.deleteCharAt(0);
    article[0] = articleCode.toString();
}

SomeArticle**.addOrChange(mContext, Integer.parseInt(article[0]), article[1], article[2], Integer.parseInt(article[3]), Double.parseDouble(article[4]));

i++;
}

エミュレーターでは問題ありませんが、実際のデバイス(HTC Desire)では次の(奇妙な)エラーが発生します:

E/AndroidRuntime(16422): java.lang.NumberFormatException: unable to parse '4661' as integer

どうしたの?

**これらのパラメーターを入力(context、int、string、string、int、double)として必要とするのは私のクラスの一部です

4

4 に答える 4

7

ファイルがUTF8またはそれらの線に沿ったものではない可能性があります。

ただし、問題に関心がないために修正をハックしたい場合は、解決策だけです:)次に、数字または小数点以外のものをすべて削除します。

String[] article = p.split(line);
Integer i = Integer.parseInt(article[0].replaceAll("[^0-9.]",""));

正規表現は完全ではありませんが(たとえば、... 999 ....に影響します)、それで問題ありません。

編集:

質問をきちんと読んでいないようです。ファイルの先頭のみにある場合は、バイト順マークである可能性が非常に高くなります。これは、ファイルがユニコードであるかどうか、およびUTF16/32ではリトルエンディアンかビッグかを示すために使用されます。エンディアン。あなたはそれが頻繁に使われるのを見る傾向がある必要はありません。

http://unicode.org/faq/utf_bom.html#bom10

于 2011-01-04T22:33:23.780 に答える
3

これをコメントとして追加するつもりでしたが、画像も含めることにしました。問題はファイルがUTF-8でないことではないようですが、実際にはその逆です。UTF-8のようですが、正しく読み取られていません。

この画像は、最初の行を含む、私が作成したUTF-8ファイルを見ている16進エディターからのものです。4661の前の3文字に注意してください...

代替テキスト

ファイルをANSI形式で保存すると、それらの文字は表示されません。

于 2011-01-04T23:09:46.110 に答える
1

Notepad ++を使用してテキストファイルを開き、メニューの[エンコード]-> [BOMなしのUTF-8でのエンコード]を選択して、このオプションで保存できます。エンコードされたバイト(EF BB BF)が削除されるため、コードは問題なく文字列を整数に解析できます。

この助けを願っています。

于 2013-05-07T15:49:19.090 に答える
0

ファイルをASCII形式に変換しましたが、同様のアプリケーションで正しく読み取られました。

于 2013-08-20T21:17:07.763 に答える