Java すっきり分かる 実践編 01 - user000422/0 GitHub Wiki
文字列操作
sbuffer無理やり追加しただけ、java基本2からstring追加すること
String str = "text";
// String 文字列調査 メソッド
str.equals("text"); // 文字列比較
str.equalsIgnoreCase("TEXT"); // 文字列比較(大文字と小文字を区別しない)
str.length(); // 文字列長を調べる
str.isEmpty(); // 空文字か調べる
// String 文字列検索 メソッド
str.contains("t"); // 指定文字列を含むか調べる
str.startsWith("t"); // 指定文字列で始まるか調べる
str.endsWith("t"); // 指定文字列で終わるか調べる
// indexOfメソッドで対象の文字列が見つからない場合は"-1"が返る(IFなどで便利)
str.indexOf("e"); // 引数の文字が最初に現れるインデックス位置
str.indexOf("t", 1); // 第二引数のインデックス位置以降で、第一引数の文字が最初に現れるインデックス位置
str.lastindexOf("e"); // 指定文字列が後ろから検索して最初に登場する位置を調べる
// String 文字列切り出し メソッド
str.charAt(1); // 引数のインデックス位置にある文字
str.substring(2); // 引数のインデックス位置から最後までの文字列
str.substring(0, 2); // 第一引数のインデックス位置から、第二引数のインデックス位置までの文字列
// String 文字列変換 メソッド
str.toLowerCase() // 全ての大文字を小文字に変換する
str.toUpperCase() // 全ての小文字を大文字に変換する
str.trim() // 先頭と末尾の空白を削除(全角スペースは除去されない)
str.replace('t', 'T'); // 第一引数を第二引数に置換
str.concat(" Word"); // 引数の文字列を最後尾に連結
// StringBuilder 文字列連結
StringBuilder sb = new StringBuilder(); // インスタンス生成
sb.append("apple"); // 文字列追加
String str = sb.toString(); // String型に変換
StringBuffer … 文字列バッファクラス
StringBuilderは速度効率が良い、StringBufferはスレッドセーフ使用可(使う場面は見たことない)
StringBuffer sb1 = new StringBuffer(); // 16文字分のバッファを生成
StringBuffer sb2 = new StringBuffer(20); // 引数の文字分のバッファを生成
StringBuffer sb3 = new StringBuffer("Test"); // 引数の文字列を持つバッファを生成
sb3.append(" Word"); // 引数の文字列を最後尾に追加
sb3.insert(3, " Sample"); // 第一引数のインデックス位置を先頭に、第二引数の文字列を追加
sb3.delete(3, 10); // 第一引数のインデックス位置から、第二引数のインデックス位置1つ前までの文字列を削除
sb3.deleteCharAt(0); // 引数のインデックス位置にある文字を削除
sb3.setCharAt(1, "E"); // 第一引数のインデックス位置の文字を、第二引数の文字で置換
sb3.toString(); // バッファ内の文字列をStringに変換(処理後に文字列を返したい時に使用)
// replaceメソッドは置換前と後の文字列が同じでなくても問題ない
sb3.replace(0, 3, "Tes"); // 第一引数のインデックス位置から、第二引数のインデックス位置1つ前までの文字列を、第三引数の文字列に置換
正規表現
○○○.matches(); // 文字列がパターンに従っていれば true
○○○.matches("文字列"); // 文字列が指定文字列と完全に一致していれば true
○○○.matches("x.xx"); // ピリオドの位置の文字はどんな1文字でも true
○○○.matches("x*xx"); // アスタリスク直前の1文字が何度続いても true
○○○.matches(".*"); // どんな文字列でも true
○○○.matches("xxx.*"); // xxxで始まるどんな文字列でも true
○○○.matches(".*xxx"); // xxxで終わるどんな文字列でも true
○○○.matches("x{n}"); // {} 直前の文字の n 回の繰り返しで true
○○○.matches("x{n,}"); // {} 直前の文字の n 回以上の繰り返しで true
○○○.matches("x{n,m}"); // {} 直前の文字の n 回以上 m 回以下の繰り返しで true
○○○.matches("x?"); // ? 直前の文字の 0回 または 1回 の繰り返しで true
○○○.matches("x+"); // + 直前の文字の 1回以上 の繰り返しで true
○○○.matches("[abc]"); // [] 内文字のどれかと一致していれば true
○○○.matches("[a-z]"); // a-z の範囲(アルファベット小文字)と一致していれば true
○○○.matches("[0-9]"); // 0-9 の範囲(半角数字)と一致していれば true
○○○.matches("^xxx$"); // ^ … 文字列の先頭, $ … 文字列の末尾(必須ではない)
○○○.split(" 正規表現 "); // 指定正規表現で文字列を分割
○○○.replaceALL(" 正規表現 ", "x"); // 正規表現で指定した箇所を x で置換
日時
Date ○○○ = new Date(); // 現在日時取得
Instant ○○○ = Instant.now(); // 現在日時取得(ナノ秒まで)
equals … 等価判定
クラスを作ったら必ず equals をオーバーライドする
等価判定をする予定のないクラスは オーバーライド 不要
@Override
public boolean equals(Object obj) {
if(obj == this) return true;
if(obj == null) return false;
// 他処理
}
Comparableインターフェース … 自然順序宣言
ArrayList
等で Collections.sort(○○○);
を使った場合に起きるエラー回避
// compareTo()メソッド を オーバーライド し自然順序方法を宣言可能に
public class ○○○ implements Comparable<○○○> {
// 処理省略
public 型 compareTo(○○○ obj) {
if(this.xxx < obj.xxx) {
return -1;
}
if(this.xxx > obj.xxx) {
return 1;
}
return 0;
}
}
clone … インスタンス複製
// clone()メソッド オーバーライド
public class ○○○ implements Cloneable {
// 処理省略
public ○○○ clone() {
○○○ result = new ○○○();
result.xxx = this.xxx; // shallow copy(浅いコピー)
result.zzz = this.zzz.clone(); // deep copy(深いコピー)
return result;
}
}