見出し画像

Java Silverに向けて② データ型と文字列操作と識別子

・データ型とは


データの種類を示す情報。原則的にプログラムは同じ種類のデータどうししか演算できない。

・データ型の種類


  ー プリミティブ型
整数、浮動小数点数、真偽値、文字
*プリミティブ型のデータ型
int, long, float, double, boolean, char, byte, short
  ー 参照型
オブジェクト型、列挙型、配列型

・プリミティブ型と値


boolean : true, false
char : 16ビット Unicode文字 ¥u0000~¥uFFFF
byte : 8ビット整数 -127~127
short : 16ビット整数 -32768~32767
int : 32ビット整数 -2147483648~2147483647
long : 64ビット整数 -9223372036854775808~9223372036854775807
float : 32ビットの浮動小数点数
double : 64ビットの浮動小数点数

・リテラル


ソースコード中に記述する値。
Javaには整数、浮動小数点数、真偽値、文字の4つのリテラルがある。
リテラルを他のデータ型である事を明示したい時には、long型であれば「L」や「I」、float型であれば「F」や「f」を値の後ろにつける。
整数リテラルは、10進数の他に8進数などでも記述できる。8進数で記述するには値の最初に「0」をつける。16進数であれば「0x」をつける。2進数であれば「0b」をつける。
nullも1つのリテラル。参照型の変数が何も参照しない事を表すためのデータ。

・整数とアンダースコア


アンダースコア「_」を使った数値表記は、桁数の多い数値を見やすくするために導入された。以下のルールに従えば、出現場所と出現回数は自由。
ーリテラルの先頭と末尾には記述しない
ー記号の前後には記述しない
*記号には、ドットやLongやfloatの「L」や「f」、2進数を示す「0b」などが含まれる。

・文字と文字列


文字=1文字であり、文字リテラルと呼ばれる。文字リテラルは、シングルクォーテションで囲む必要がある。
また、2文字以上は文字列となり文字列リテラルと呼ばれる。文字列リテラルはダブルクォーテションで囲む。

・文字コード


1993年に世界中の文字を集めた共通の文字符号化方式「Unicode」が作られた。JavaはUnicodeを標準の文字コードに採用している。
Javaでは、「¥u」の後ろに16進数4桁をつけ、シングルクォーテションで囲む。16進数4桁の数値で文字を表す事ができる。そのため、char型の変数には0~65535の数値を代入できる。そのため、以下の式は正しい。
char a = 22;

・varを使った型推論


var i = 10;
とした場合、int型となる。右辺に合わせて、コンパイル時に型を推論して、そのデータ型に置き換える。
変数が初期化していない場合、nullで初期化した場合はコンパイルエラーとなる。
型推論は、メソッドの戻り値を受け取る時などにも使える。
varはローカル変数宣言に使えるが、フィールド宣言には使えないという特徴がある。

・char型


char型に代入できるもの。
ーシングルクォーテーションで囲んだ1文字(文字リテラル)
ーシングルクォーテーションで囲んだ「¥u」から始まるUnicode番号
ー0〜65535の数値
*cahr型ではシングルクォーテーションで文字を囲む必要がある。ダブルクォーテションで囲むとStringになるが、charとStringは別物なのでコンパイルエラーになる。
*char型にはnullを代入する事ができない。nullはリテラルの一種であるため代入する事ができない。

・mutableとimmutable


一度セットしたフィールドの値を変更できるオブジェクトを「mutableなオブジェクト」という。変更できないオブジェクトを「immutableなオブジェクト」という。

・String型


文字列操作のためのメソッド。
以下はStringクラスのインスタンスを生成する代表的な方法。
  ー newでインスタンス化
  ー ダブルクォーテーションで文字列を囲む

・String型のimmutableなオブジェクトの定義


  ー 全てのフィールドをprivateで宣言する。
  ー getter, setterメソッドを作らない。
  ー クラスをfinalで宣言し、メソッドがオーバーライドできないようにする。

・String型とimmutable


String型として生成されたインスタンスは後から変更できない。
1度生成されたインスタンスを変更したい場合は、新しいインスタンスを生成する必要がある。

・Stringとnull


String a = null;
上記のように、nullを渡すと”null"という文字列で扱う。

・ .replaceAll()
対象の文字列.replaceAll(置換したい文字列, 置換する文字列);
replaceAll()は、置換した結果の新しい文字列を作る。
引数としてStringクラスを渡し、そのメソッドでreplaceAll()を使った場合、引数で渡した値は変わらない。そのメソッド内で値が変わっても呼び出し側のメソッドでは値はそのままである。

・ .replace()
対象の文字列.replace(置換したい文字列, 置換する文字列);
.replaceAll()は正規表現も「置換したい文字列」として使える。.replace()では正規表現を使う事はできない。

・ .charAt()
文字列からn番目の文字列を抜き出すために使う。
文字位置は0から始まる。

・ .indexOf()
引数で指定された文字が文字列のどの位置にあるかを調べるためのメソッド。文字が存在していれば、文字の位置を整数で返す。文字が存在していなければ-1を返す。

・ .substring()
指定した文字を抜き出す事ができる。第一引数には開始位置、第二引数には終了位置を指定する。文字列の長さを超える値を指定した場合は例外が発生する。
第一引数だけを指定する事もできる。その場合は、開始位置だけを指定したことになり、開始位置以降の文字全てを抽出することになる。

・ .length()
文字数をカウントし、戻すメソッド。半角も全角も1文字として返す。

・ .startsWith()
指定した文字列の始まりの文字列を判定するために使う。
文字列が指定した引数で始まっていればtrueを返す。それ以外の場合はfalseを返す。
2つ目の引数は比較を開始する位置である。

・ .endsWith()
指定した文字で終わっているかどうかを調べる。
文字列が引数で終わっていればtrueを返す。それ以外の場合はfalseを返す。

・ .concat()
文字列を結合するメソッド。元になる文字列を変更するわけではない。
元になる文字列.concat(結合したい文字列);

・ .intern()
文字列オブジェクトの正規表現を返す。

・ .append()
文字列を結合するメソッド。StringBuilderクラスとStringBufferクラスに対して使う。Stringクラスには使えない。

・「+」演算子
+でも文字列を結合できる。片方が数値、もう片方が文字列でも結合できる。この場合は、文字列として結合される。以下のような場合は、1+2で加算された後、aという文字列が結合する。
String str = 1 + 2 + “a”;
//結果 3a
しかし、以下のような場合は、左側から実行される。そのため、”a”+1が先に実行され、”a1”+2でa12
String str = “a” + 1 + 2;
//結果 a12

・StringBuilderクラス


文字列結合、部分置換、検索などを行う事ができる。
  ー append : 引数で結合したい文字列を指定
  ー insert : 引数で挿入したい文字列と挿入したい文字列を指定
  ー replace : 引数で置換したい範囲と、置換後の文字列を指定
  ー delete : 引数で削除したい文字列を指定
  ー indexOf : 引数で検索したい文字列を指定する。その文字列が最初に出現する位置を返却する。

・StringBuilderの特徴


StringBuilderは、デフォルトで16文字のバッファを持っている。
そのため、StringBuilderで生成された文字列に対して、length()で文字列の長さを測ると、「文字の長さ + 16」となる。

・識別子とは


Javaでは、変数やメソッド、クラスなどの名前の事を識別子という。識別子は基本的に自由に決める事ができる。

・識別子の規約


  ー 予約語は識別子として使うことはできない。
  ー 使える記号は、「アンダースコア(_)」と「通貨記号(€、$、¥、¢など)」
*ドル記号($)以外の通貨記号は文字コードによって問題が起こる事がある。
*使える記号は_と通貨記号のみであるため、識別子に{}や.は使えない。
  ー 先頭を数字にしてはいけない(先頭の文字は文字か記号)。

参照
Java SE11 Silver問題集

この記事が気に入ったらサポートをしてみませんか?