• ベストアンサー

javaの比較一致(equals)について

javaの基礎的なことについて質問させていただきます。 まず byte配列を空にして、 new String(byteStream.toByteArray(), "UTF-8"); でString変数に代入した後に split関数で分割します。 分割した後に equals関数を使って比較をしてみたのですが TRUEにならず compareTo関数を使用してみたところかなり数値がずれていました。 文字コードで取得した場合はズレが生じるのでしょうか? できればご教授おねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.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 ならバイトオーダーマークです。取り除いてください。

tamasandayo
質問者

お礼

秀丸エディタでエンディアンを取り除いたところ動きました! プログラムでちゃんと判別できるようにスキルをつけたいです・・・

tamasandayo
質問者

補足

 一文字目が feff ならバイトオーダーマークです。取り除いてください。 一文字目が feff 入ってました・・・w ほんとに申し訳ないです・・・ これはどうすればとりのぞけるのでしょうか・・・?

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「一応中には同じ文字列が入っている」というのをどうやって確認したのかわからんけど, #2 同様「(その確認した方法ではわからない/わかりにくい) ゴミが入っている」ということは考えられる. ところで, 最後の方の String[] textstr =strs3[i].split("|"); は単なる書き間違いですよね?

tamasandayo
質問者

補足

String[] textstr =strs3[i].split("|"); は今後文字の分割で書いたやつなので気にしないで大丈夫です・・・ 一応Eclipseのデバッグで変数の中身を確認したのですがなぜか・・・文字が一字一句間違っていないのにfalseがかえってきます・・・ Eclipseでデバッグ機能でちゃんと調べられる方法はありますでしょうか・・・?

noname#177743
noname#177743
回答No.2

テキストに半角スペースなどゴミが混じってるという可能性はありませんか? 取得したテキストをtrim()して比較しても同様ですか? あるいは、大文字小文字が一部あっていないとか……。

tamasandayo
質問者

補足

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)
回答No.1

「分割した後に equals関数を使って比較をしてみた」ってのは, 何と何を比較したんですか?

tamasandayo
質問者

補足

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で帰ってきます・・・

関連するQ&A

専門家に質問してみよう