- ベストアンサー
javaの比較一致(equals)について
javaの基礎的なことについて質問させていただきます。 まず byte配列を空にして、 new String(byteStream.toByteArray(), "UTF-8"); でString変数に代入した後に split関数で分割します。 分割した後に equals関数を使って比較をしてみたのですが TRUEにならず compareTo関数を使用してみたところかなり数値がずれていました。 文字コードで取得した場合はズレが生じるのでしょうか? できればご教授おねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 UTF-8ということで、バイトオーダーマークが怪しいと思うのですが、とにかくstrs3[0]の中身をはっきりさせないことには原因究明は難しいと思います。 for (int i = 0; i < strs3[0].length(); i++) { System.out.print(Integer.toHexString((int)strs3[0].charAt(i)) + " "); } System.out.println(); 一文字目が feff ならバイトオーダーマークです。取り除いてください。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
「一応中には同じ文字列が入っている」というのをどうやって確認したのかわからんけど, #2 同様「(その確認した方法ではわからない/わかりにくい) ゴミが入っている」ということは考えられる. ところで, 最後の方の String[] textstr =strs3[i].split("|"); は単なる書き間違いですよね?
補足
String[] textstr =strs3[i].split("|"); は今後文字の分割で書いたやつなので気にしないで大丈夫です・・・ 一応Eclipseのデバッグで変数の中身を確認したのですがなぜか・・・文字が一字一句間違っていないのにfalseがかえってきます・・・ Eclipseでデバッグ機能でちゃんと調べられる方法はありますでしょうか・・・?
テキストに半角スペースなどゴミが混じってるという可能性はありませんか? 取得したテキストをtrim()して比較しても同様ですか? あるいは、大文字小文字が一部あっていないとか……。
補足
trim()して比較しても同様でした・・・ 文字の一字一句まちがっていないです・・・ 文字コードで分割するとだめなのでしょうか・・・? テキストロードは以下のようにやってます。 //テキストのロード public String loadTextFile(InputStream inputStream) throws IOException { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); byte[] bytes = new byte[4096]; int len = 0; while ((len = inputStream.read(bytes)) > 0) byteStream.write(bytes, 0, len); return new String(byteStream.toByteArray(), "UTF-8"); }
- Tacosan
- ベストアンサー率23% (3656/15482)
「分割した後に equals関数を使って比較をしてみた」ってのは, 何と何を比較したんですか?
補足
for(i=0; i<strs2.length;){ String[] strs3 = strs2[i].split(","); if(strs3[0].compareTo("NAME")==0){ nameflag=Integer.parseInt(strs3[1]); i++; //break; } if(strs3[0].equals("BACKGRAWND")){ fadeflag = Integer.parseInt(strs3[1]); //バックナンバーによって出力 backgroundnumber =Integer.parseInt(strs3[2]); //フェード終了後出力 i++; //break; } if(strs3[0].equals("TEXT")){ String[] textstr =strs3[i].split("|"); //テクスチャに文字列を代入する。 textImage = new Texture(glGame,textstr , 0, 0, 30); //描画範囲を指定してやる。 textRegion = new TextureRegion(textImage,60, 360, textImage.width, textImage.height); i++; //break; } } ソースの一部です 一応中には同じ文字列が入っているのですがfalseで帰ってきます・・・
お礼
秀丸エディタでエンディアンを取り除いたところ動きました! プログラムでちゃんと判別できるようにスキルをつけたいです・・・
補足
一文字目が feff ならバイトオーダーマークです。取り除いてください。 一文字目が feff 入ってました・・・w ほんとに申し訳ないです・・・ これはどうすればとりのぞけるのでしょうか・・・?