実現したいこと
格納されている要素の改行コードを「LF」⇒「CRLF」に変換したい
環境
Java5(古いので使えないメソッドが多数あり苦戦しています。。。)
考えたロジック
keyからValue値を取得して、「LF」が存在したら「CRLF」に置き換える
というのを考えたが使えないメソッドがあり断念。
(↑もし、1.5でもできるのある場合ご教授願いたいです)
↓
keyもvalueもどっちからも「LF」が存在するか確認して存在する場合置き換える。
現状
recordObj.replace("\r", "☆");
でNoSuchMethodErrorが発生
コード
java
1package dba; 2 3import java.util.ArrayList; 4import java.util.HashMap; 5import java.util.List; 6 7public class JapanFood { 8public void Food() { 9 10 List<HashMap<String, Object>> foodMap = null; 11 12 foodMap = foodInfo(); 13 14 List<HashMap<String, Object>> returnMap = new ArrayList<HashMap<String, Object>>(); 15 16 System.out.println("【変換前】" + returnMap); 17 18 for (HashMap<String, Object> recordObj : foodMap) { 19 // 「LF」⇒「CRLF」に変換する 20 recordObj.replace("\r", "☆"); //NoSuchMethodError 21 recordObj.replace("\n", "☆"); 22 recordObj.replace("☆", "\r\n"); 23 returnMap.add(recordObj); 24 } 25 26 System.out.println("【返還後】" + returnMap); 27 } 28 29 public List<HashMap<String, Object>> foodInfo() { 30 31 HashMap<String, Object> map = new HashMap<String, Object>(); 32 List<HashMap<String, Object>> returnMap = new ArrayList<HashMap<String, Object>>(); 33 34 map.put("HOKKAIDO","札幌・\n味噌ラーメン"); 35 map.put("AOMORI","青森・\n八戸汁"); 36 map.put("IWATE","盛岡・\nわんこそば"); 37 map.put("MIYAGI","仙台・\n牛タン"); 38 map.put("AKITA","秋田・\nきりたんぽ"); 39 map.put("YAMAGATA","山形・\nさくらんぼ"); 40 map.put("FUKUSHIMA","福島・\n喜多方ラーメン"); 41 map.put("IBARAKI","水戸・\n水戸納豆"); 42 map.put("TOCHIGI","宇都宮・\n餃子"); 43 map.put("GUNMA","前橋・\nこんにゃく"); 44 map.put("SAITAMA","さいたま・\nさつまいも"); 45 map.put("CHIBA","千葉・\n落花生"); 46 map.put("TOKYO","新宿・\nもんじゃ焼き"); 47 map.put("KANAGAWA","横浜・\n海軍カレー"); 48 map.put("NIIGATA","新潟・\n笹団子"); 49 map.put("TOYAMA","富山・\n白エビ"); 50 map.put("ISHIKAWA","金沢・\nきんつば"); 51 map.put("FUKUI","福井・\n水羊羹"); 52 map.put("YAMANASHI","甲府・\nぶどう"); 53 map.put("NAGANO","長野・\nりんご"); 54 map.put("GIFU","GIFU・\n飛騨牛"); 55 map.put("SHIZUOKA","SHIZUOKA・\nしらす"); 56 map.put("AICHI","NAGOYA・\n味噌カツ"); 57 58 returnMap.add(map); 59 60 return returnMap; 61 } 62} 63
終わりに
文字列として配列の要素は持っています。
もし、これの他に簡単に作成できる場合それと併せてご教授願いたいです。
宜しくお願いいたします。
なぜ HashMap<String, String> ではなく HashMap<String, Object> なのですか?
本来DBから値を取得するのですが、今回はローカル環境で動作確認をするためDBから取得する予定のデータをfoodInfoメソッドでスタブとして格納しています。
DBから取得する際は数字が入っていることもあるので、今回はHashMap<String, Object> にしました。
質問の答えになっておりますでしょうか?
質問の答えにはなっています。
ただStringとIntegerが混在するのは良い設計だとは思いませんが。
続けて、なぜ一つしか要素が無いのにリストを使っているのでしょうか。
※重複して送信してしまったため削除
ご指摘有難うございます、
設計に関しては今回考えていなかったです。
今回は優先度を落としますが、次回気を付けます。
実は、Listにする理由は今回このソースは呼び出し元のソースがありそこの型がListだからListにしています。
今回改行コードの置換を行いたかったのでvoidにしてこのソースだけであたかも完結しているかのようにしました。
多々、紛らわしい点があり申し訳ございません。
> keyからValue値を取得して、「LF」が存在したら「CRLF」に置き換える
よく考えるとこれの意味が分からない。
keyを書き換えたいならValueを持ってくる意味は無いし、Valueを書き換えたいとしたらValueがObjectになっているので不可能。
keyは書き換えません。
Valueの中にある「LF」を「CRLF」に書き換えたいというものになります。
Objectになっているので不可能なのでしょうか?
instanceof Stringで判定すれば可能ですが、ちょっと意味が分かりません。
もしやと思いますが、「DBから取得する際は数字が入っていることもある」というのは、「ただの文字列としての数字」であって、IntegerやDoubleに変換しているわけではないのでは?
DBからくるものはおそらく数字でも文字列の数字ということが分かりました。
なので今回ここはObjectにしなくても全然よさそうです。
ただ、他との依存関係がありObjectにせざるを得ないというものでした。
私は数字が来ている=intも来るんだと考えてしまいましたがよく見ると数字は文字列として扱われていることに気づきました。
DBから取得する際にObjectにする必要というのはどんな時が他に存在しますか?もしよければご教授願いたいです。
回答2件
あなたの回答
tips
プレビュー