- ベストアンサー
配列に入った文字列を結合したいのですが
str = array1[m] + array2[n] というように結合したいのですがエラーになります。 どうすればいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラーの理由はちゃんとメッセージに書いてありますよ。 can't convert nil into String nilをString(文字列)に変換できない よって、どちらかがnilということで ・array1[m]が文字列ではない ・array2[n]が文字列ではない に該当します。具体的には ・termがnil ・dic_trans_noun[n]がnil のどちらか、あるいは両方です。 さらに、 a+b は a.+(b)であること、nilには+メソッドが定義されていないことから、「nil+文字列」ではNoMethodErrorになります。 TypeErrorにはなっている、ということは、「文字列+nil」なので ・dic_trans_noun[n]がnil が原因です。 dic_trans_noun[n]がnil、ということは次の2通りが考えられます ・実際にdic_trans_nounのn要素にnilが代入されている ・nがdic_trans_nounの範囲外になっている dic_trans_nounについての記述がここには無いので、どちらの理由かは不明です。 対処法ですが ・nilの場合は別の処理をする ・nilにならないようにdic_trans_noun、またはnを調整する となります。どちらがこのプログラムに求められる仕様なのかは、現在の情報だけでは。私には判断できません。
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
具体的なエラーメッセージは何でしょう? 通常なら、それで問題なく文字列の結合ができます。 ・array1が配列ではない ・array2が配列ではない ・mがarray1の範囲外 ・nがarray2の範囲外 ・array1[m]が文字列ではない ・array2[n]が文字列ではない あたりが予想できますが、エラーメッセージを読まなければ、どれに該当するか(または、別の要因なのか)、わかりません。
補足
回答ありがとうございます。 次のようなプログラムになっています。 1 ### 2 out_find_term = Array.new 3 4 sentence_array.each{|sentence| 5 out_find_term.push "" 6 out_find_term.push "###" + sentence 7 8 n = 0 9 dic_term_noun.each{|term| 10 if /\b#{term}/ =~ sentence then 11 out_find_term.push term #辞書にあれば配列に入れる 12 out_find_term.push dic_trans_noun[n] 13 out_find_term.push "\n" 14 15 end 16 n = n + 1 17 } 18 この11行と12行を a = term + dic_trans_noun[n] out_find_term.push a に変えたのですが うまくいきません。 (out_find_termを出力したときに、1行になるように結合させたいのです) エラーメッセージは「in `+': can't convert nil into String (TypeError)」です。 out_find_term.push(term + dic_trans_noun[n])に変えても同じです。 (補足、遅くなってすみません)
お礼
ありがとうございます。 nilのときは別の処理をするようにしました。 型変換みたいなものが必要かと思っていたのですが、 一部の要素だけが問題だったんですね。