- ベストアンサー
文字列から半角スペースと全角スペースを取り除く処理
DBから取得した文字列に半角スペースか全角スペースが 含まれている場合取り除きたい、と考えています。 以下の様なロジックを考えているのですが、 こんな感じで良いのでしょうか。 普通は、どの様にするのでしょうか? アドバイスなどありましたら、お願い致します。m(__)m private String test(String str) { StringBuffer sb = new StringBuffer(); char[] chr = str.toCharArray(); for(int p=0;p<chr.length;p++) { if( chr[p] == ' ' || chr[p] == ' ' ) continue; sb.append(chr[p]); } return sb.toString(); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
String#replaceAll() でいけると思いますが、ご指摘の方法でも問題ないと思います。 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String) 私だったら char の配列は作らずに、for文の中で charAt() で毎回1文字ずつとりだす方法もためしてみるかもしれません。可読性もパフォーマンスもあんまかわらないかもしれませんが、実際動かしてみてボトルネックになる箇所であれば色々試して比べてみてはいかがでしょうか。 そうでなければとりあえず「動きゃいい」程度に考えて差し支えないかと。
その他の回答 (3)
- SpiralGalaxy
- ベストアンサー率39% (649/1653)
>DBから取得した文字列 SQLでやるとか(^^; (1) select replace(replace(item01, ' ', ''), ' ', '') as item01 from table001 where ~ (2) Oracle10 だった場合 select regexp_replace(item01, '([ ])+', '') as item01 from table001 where ~ (2)は動作環境がないので確認できません。
お礼
なるほど。 SQLでやってしまえばロジックが単純になりそうですね。 ありがとうございます。
- yusukey
- ベストアンサー率56% (17/30)
既に動くサンプルがあっての質問ということはパフォーマンスを気にされてのことでしょうか? もしかすると indexof でスペースの位置を判別して、その手前までを substring して StringBuffer に append、という繰り返しの方が一文字一文字 append しなくて良い分高速かもしれません。
お礼
>既に動くサンプルがあっての質問ということはパフォーマンスを気にされてのことでしょうか? 半角スペース・全角スペースをif分で判断する時に' 'や' 'としているのですが getBytesメソッドを使って文字コードを見て判断した方が良いのかな? と思い、普通はどうやるのだろうと不安になったので質問させて頂きました。 パフォーマンスの事はあまり気にしていませんでした。 度々の言葉足らず、申し訳ありませんでした。
- SpiralGalaxy
- ベストアンサー率39% (649/1653)
String aaa が取り除きたい対象の文字列とします。 String kotae = aaa.replaceAll("[ ]", ""); [ ] の中には半角スペース1個と全角スペース一個がはいってます。
お礼
返信ありがとうございます。 yusukeyさんの返信にも書かせて頂きましたが、私の環境のJDKのバージョンが1.3.1でした。。。 質問する際に、記述すべき情報ですよね。 申し訳ありません。m(__)m
お礼
返信ありがとうございます。 replaceAllメソッドを使って置換する方法や、charAtを使う方法もあるのですね。 作業環境がJDK1.3.1だったため、replaceAllは使えませんでした。 質問する際に、バージョンを書いていませんでした。申し訳ありません。m(__)m