dポイントプレゼントキャンペーン実施中!

javaの基礎的なことについて質問させていただきます。
まず byte配列を空にして、
new String(byteStream.toByteArray(), "UTF-8");
でString変数に代入した後に

split関数で分割します。
分割した後に equals関数を使って比較をしてみたのですが

TRUEにならず compareTo関数を使用してみたところかなり数値がずれていました。

文字コードで取得した場合はズレが生じるのでしょうか?

できればご教授おねがいします。

A 回答 (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 ならバイトオーダーマークです。取り除いてください。

この回答への補足

 一文字目が feff ならバイトオーダーマークです。取り除いてください。

一文字目が feff 入ってました・・・w
ほんとに申し訳ないです・・・

これはどうすればとりのぞけるのでしょうか・・・?

補足日時:2012/11/06 01:13
    • good
    • 0
この回答へのお礼

秀丸エディタでエンディアンを取り除いたところ動きました!

プログラムでちゃんと判別できるようにスキルをつけたいです・・・

お礼日時:2012/11/06 02:45

「一応中には同じ文字列が入っている」というのをどうやって確認したのかわからんけど, #2 同様「(その確認した方法ではわからない/わかりにくい) ゴミが入っている」ということは考えられる.



ところで, 最後の方の
String[] textstr =strs3[i].split("|");
は単なる書き間違いですよね?

この回答への補足

String[] textstr =strs3[i].split("|");
は今後文字の分割で書いたやつなので気にしないで大丈夫です・・・

一応Eclipseのデバッグで変数の中身を確認したのですがなぜか・・・文字が一字一句間違っていないのにfalseがかえってきます・・・

Eclipseでデバッグ機能でちゃんと調べられる方法はありますでしょうか・・・?

補足日時:2012/11/05 13:14
    • good
    • 0

テキストに半角スペースなどゴミが混じってるという可能性はありませんか? 取得したテキストを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");
}

補足日時:2012/11/05 13:10
    • good
    • 0

「分割した後に 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で帰ってきます・・・

補足日時:2012/11/05 11:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!