- PR -

ブランクの置換について

投稿者投稿内容
にんじん
会議室デビュー日: 2002/02/10
投稿数: 9
投稿日時: 2002-03-12 13:53
ゼロをブランクに置換するために
String MM = rs.getString("月").replace('0','');
というふうに書いているのですが、コンパイルでエラーが
発生してしまいます。以下のように記述すると上手くいくのですが
String MM = rs.getString("月").replace('0',' ');
replaceにブランクは使えないのでしょうか?
初歩的な質問ですがよろしくお願いします。

また、皆さんはAPI関数をどのようにして調べているのでしょうか?
Java初心者のため、例えば「システム日付の年だけ取得したい」という場合に、
どの関数を使えば良いのかと逆引きしたいときが良くあります。
そんなときに役立つ本があれば教えて頂けないでしょうか?
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-03-12 15:37
引用:

にんじんさんの書き込み (2002-03-12 13:53) より:
ゼロをブランクに置換するために
String MM = rs.getString("月").replace('0','');
というふうに書いているのですが、コンパイルでエラーが
発生してしまいます。



Javaではシングルクオートで囲んで「文字」を表します。

だから、'a'というのはaという文字の文字オブジェクト(Character)を表します。
つまり、プログラムのときに、一々、new Character(aを表す文字コード)と書かなくてもよいように言語のシンタクス上、配慮がなされているわけです。

さて、御質問のブランクですが、「何も無い」というのを表す文字は存在しませんので、''からCharacterオブジェクトへの変換のしようがありません。そこで、コンパイラは困ってしまってエラーを出すわけです。コンパイラは、このような人間の意図を汲み取ってはくれず、律義に言語仕様に従ってエラーをレポートするだけです。

ですから、replaceという個別のAPIの話ではなく、replaceに文字オブジェクトが渡るはるか以前に話です。文字操作なら、StringやStringBufferというクラスのAPIを調べてみれば、使えるものが見つかると思います。逆引きの入門書についてはよく知りませんが、洋書ならJava CookBookというのがありますね。私はPerl CookBookしか持ってませんが。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-03-13 01:19
JavaScript と Java は、まったく別物です。
現在、JavaScript の後継は ECMA Script という標準規格になっています。

# Mozilla, Netscape6 は ECMA Script 準拠。
# ちなみに Microsoft のは JScript

------
余談。
Java には replace がありません。悲しい。
StringBuffer でせこせこやるしかないのねん…。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-03-13 09:28
引用:

mikiさんの書き込み (2002-03-12 15:37) より:

Javaではシングルクオートで囲んで「文字」を表します。

だから、'a'というのはaという文字の文字オブジェクト(Character)を表します。
つまり、プログラムのときに、一々、new Character(aを表す文字コード)と書かなくてもよいように言語のシンタクス上、配慮がなされているわけです。



上の引用中、明らかに間違っていることを書いていたので訂正します。
'a'は基本データ型のcharであって、ラッパークラスのCharacterではありません。
Smalltalkと混同していました。

失礼しました。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2002-03-13 17:13
私は文字列の置換は jakarta-oro ライブラリを使っています。
Perlと同じように使えて便利です。(速度は遅いと思いますが)

こんな感じです。

Perl5Util perl = new Perl5Util();
String orgStr = "abc def ghi";
String newStr = perl.substitute("s/ +//g", orgStr);
//newStr は "abcdefghi" になります。
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-03-28 14:34
私の場合文字列の置換はそれ用の自作メソッドでやっちゃってます。
ちょっと速度には問題があるのですが、
それなりに便利には使えているかなと。

/** 任意の文字列aを任意の文字列bに置き換えます */
public static String replace( String str, String a, String b ){
  String s = str;
  String s2 = "";

  while ( s.indexOf( a ) >= 0 && s.length() > a.length() ){
    s2 += s.substring( 0, s.indexOf( a ) ) + b;
    s = s.substring( s.indexOf( a ) + a.length(), s.length() );
  }
  return( s2 + s );
}

例えば"あいうえお"という文字列の"う"を"く"に置換したい場合は
String s = "あいうえお";
s = replace( s, "う", "く" );

あるいは"う"を""に置換したい場合は
String s = "あいうえお";
s = replace( s, "う", "" );

はたまた"いうえ"を"きくけ"に置換したい場合は
String s = "あいうえお";
s = replace( s, "いうえ", "きくけ" );

という具合に使えます。

_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp

[ メッセージ編集済み 編集者: ayum 編集日時 2002-03-28 14:36 ]

[ メッセージ編集済み 編集者: ayum 編集日時 2002-03-28 15:49 ]
katsum
大ベテラン
会議室デビュー日: 2002/02/27
投稿数: 119
お住まい・勤務地: 東京都
投稿日時: 2002-03-28 16:44
replace("aaa", "a", "b");

だと "bbb" とはならずに "bba" となりますね。
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-03-28 18:44
失礼しました。
情けないことにこれまでそのバグに気付かず使っていました。
下のものが修正版です。

public static String replace( String str, String a, String b ){
  String s = str;
  String s2 = "";
  while ( s.indexOf( a ) >= 0 && s.length() >= a.length() ){
    s2 += s.substring( 0, s.indexOf( a ) ) + b;
    s = s.substring( s.indexOf( a ) + a.length(), s.length() );
  }
  return( s2 + s );
}

一応以下のテストで正常動作を確認しております。

replace( "あいうえお" , "う" , "く" );
replace( "あいうえお" , "う" , "" );
replace( "あいうえお" , "いうえ", "きくけ" );
replace( "aaa" , "a" , "b" );
replace( "aba" , "a" , "b" );
replace( "aabbaabbaabb", "bb" , "b" );
replace( "aabbaabbaa" , "b" , "cc" );

_________________
【One step closer to you】Ayumu Kobayashi ayum@na.sakura.ne.jp

スキルアップ/キャリアアップ(JOB@IT)