StringBufferクラスは、オブジェクト(変数)の文字列を直接的に変更を加える事ができる。Stringクラスでは、一度代入した文字の直接的な変更はできない。
【 仮定義 】
String str1 = "HELLO";
String str2 = "world";
String str3 = "HELLOwarld";
int num = 0;
int num1 = 3;
int num2 = 5;
char ch = 'a'
例えば、str1の後ろにstr2を付け加えたい場合、文字列str1を直接的に変更を加える事は出来ない。新たに"HELLOhello"を定義し、代入をしなおす。
StringBuffer クラスのオブジェクト(変数)であれば、文字列を変更するメゾットが用意されている。
StringBufferクラスを使用するには『new』による、インスタンスオブジェクト(変数)の作成(呼び出し)と宣言が必要になる。省略は出来ない。例題ではStringBuffer型の識別子はsbを使う。
0 オブジェクト(変数)の作成
StringBuffer型のsb(オブジェクト)を宣言し、String型の引数str1を代入する。
Q:
短縮する場合としない場合を記述
char型、int型、double型を代入する場合どの様に代入するのか
A:
省略あり
StringBuffer sb = new StringBuffer(str1);
省略なし
StringBuffer sb;
sb = new StringBuffer(str1);
オブジェクトの作成時の引数は、String型の文字列でなくてはならない。データ型が、『char,int,double』はコンパイルは通るが代入できない。charも代入できそうだが、代入できないので注意。文字や数字を引数で使用する場合は、String型で宣言してから代入する。
【 例 】
String str3 = "a"
String str4 ="4597"
String str5 = "40.5"
Q1:
StringBuffer型の文字列の後ろに、引数char,String,int型を付け加え、StringBuffer型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A1:
StringBuffer append(char ch)
sb = sb.append(str2);
Q2:
StringBuffer型の文字列の、引数の位置の文字を削除し、StringBuffer型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A2:
StringBuffer deleteCharAt(int index)
sb = sb.deleteCharAt(num);
Charは基本型なので大文字。StringBufferクラスdeleteのみCharAtをつける。
引数は、Char型のみ。String、int、doubleはエラーになる。←確認
Q3: StringBuffer型の文字列に、引数の位置に文字又は文字列を追加し、StringBuffer型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A3:
StringBuffer insert(int offset , char ch or String str)
sb = sb.insert(num , ch) ;
sb = sb.insert(num , Str1);
:直訳: insret 挿入する・はさみ込む
Q4:
StringBuffer型の文字列の長さをint型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A4:
int length()
int num = sb.length();
戻り値は、1番目を0とカウントされる。StringBufferクラスでも、length()メゾットが用意されている。このインスタンスメゾットは引数を持たない。
認識間違いしやすい所は、sbを引数としてしまう時。
main()クラスでのインスタンスオブジェクト(変数や数値の事を指す)作成後、作成したインスタンスオブジェクトを使用する為に、インスタンスメゾットを呼び出す。その際、呼び出し方の記述方法は、常に単一で、『主語を、どうする、何々を使って』と記述する。(※クラスオブジェクトは記述の方法が異なる)
sb.length();の場合
元となる変数【主語を】.メゾット名【どうする】(引数)【何々を使って】;となる
『元となる変数sbを、カウントする、()内の引数を使って』と認識しながら記述する。
今回のlengthは、カウントするだけなので、
『元となる変数sbを、カウントする、()内の引数を用いて』となり、引数が不要になる。よって()内は空欄のままになる。
Q5:
StringBuffer型の文字列の、引数の数値の文字列を、引数の文字列で置換し、StringBuffer型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A5:
StringBuffer replace(int Strt ,int End, String str)
sb = sb.replace(num,num1,str2);
引数int strt ,int endは、int strt以上からint end未満までと定義されている。
Q6:
StringBuffer型の文字列を、文字列を逆にし、StringBuffer型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A6:
StringBuffer reverse()
sb = sb.reverse();
:直訳: reverse 反転させる・逆にする・ひっくり返す
String型の文字列を引数にする事は出来ない。
『主語を、どうする、何々を使って』に当てはめてみると、
『文字列sbを、反転させる、引数の文字列を使って』となると意味が通らなくなる。
sbに違う文字列を付け加えて、反転させたい場合は、sbに文字列を付け加えた後、付け加えた後の文字列を反転させる2段階に記述を分けなければならない。
Q7:
StringBuffer型の文字列の、引数の文字の位置を引数の文字にする。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A7:
void setCharAt(int index, char ch);
sb.setCharAt(ch);
インスタンスメゾットに戻り値が無いので、sbの文字列を変更しただけ。sbに代入できない。
sb = sb.setCharAt(ch);//エラー: 不適合な型: voidをStringBufferに変換できません:
ここが、戻り値がある場合とない場合の違い。戻り値があるインスタンスメゾットの場合(Q1~Q6)、戻り値の型と適合する、宣言と初期化済みの変数であれば代入子演算を使い直接代入できる。戻り値がある場合でも代入しなくてもよい。その場合は、Q7と記述方法は同じで、代入子演算を省略する。
:参照:esson10文字列を扱うクラスSample051.java又は教科書p253
Q8:
StringBuffer型の文字列を、String型に変換し、String型で返す。インスタンスメゾットを記述し、mainクラスでメゾットを呼び出すコードを記述。
A8:
String toString()
String str = sb.toString();
Stringクラスに戻したい時に使用する。
何を、どうする、引数を使ってに当てはめてみると
『sbをString型にする引数を使って』になる。
Objectクラスのクラス変数のオブジェクト名.toString()オーバーロードも同じ意味になる。