###if(==)で文字列が一致しているはずなのにtrueが返されない。
題目通りです。
私は以下のコードのように、もしname_list[chapCount]
の文字列が"name"
か"name_body"
ならname
(findViewByidで取得したテキストビュー)にnullを入れる、それ以外ならname_list[chapCount]
の中身を入れるという処理を書きました。
Log.i("text", Integer.toString(chapCount)) Log.i("tex", name_list[chapCount]) if (name_list[chapCount] =="name" || name_list[chapCount]=="name_body"){ name?.text = null }else{ name!!.text = name_list[chapCount] Log.i("text", "name_bodyない") }
しかし、以下のログ出力の画像を見てわかると思うのですが、name_list[1]
のときはきちんとTrueが返され、"name_bodyない"
は出力されていないのですが、name_list[0]
のときは中身がname_body
であるにもかかわらず"name_bodyない"が出力されています(=if文でtrueが返されていない)
これはもはや謎としかいいようがありません。どれだけ頭をひねっても解決には至りませんでした。
しまいには家族と友達の次に疑ってはいけないコンピューターを疑うしまつです・・・(実際にandroid studioの再起動をした)(しかし改善はされず)
どうか、この怪奇現象の謎に挑んでくれるかたがいらっしゃったら、ご助力お願いします・・・!
追記---
デバッガでifにブレークポイント張ってname_listの中身を見た結果がこちらです・・・
やはり0にも1にも同じname_body
が入っているみたいです・・・
追記2---
2,3,4以降も試しましたが残念なことに?挙動通りでした・・・
もう消去法で、私がここに記していない他のコードが原因となっているとしか思えませんね・・・
追記3---
ある回答者様のご助言から、いったん文字列をnameText
という変数に入れ、println(nameText.toCharArray().joinToString { "'$it'" })
を試してみたら驚くべきことが判明しました。
それは文字が
System.out: '', 'n', 'a', 'm', 'e', '', 'b', 'o', 'd', 'y'
と最初に空の文字列が入っていたということです。(他の文字列は'n', 'a', 'm', 'e', '', 'b', 'o', 'd', 'y'だった)
これが==が認識しない原因でした。一応報告として・・・
追記4---
どうやら、BOMというものが付いているテキストファイルだったのが原因だったようです。
windowsのメモ帳ではなく、sublimetextを使ってUTF-8で保存したら実行通りできました。
本当にみなさんありがとうございました!!!
回答4件
あなたの回答
tips
プレビュー