「スッキリわかるJava入門 第3版」の感想・備忘録2

スポンサーリンク
「スッキリわかるJava入門 第3版」の感想・備忘録1の続き

文字列

  • 文字列の比較はequalsメソッド
    System.out.println("hello" == new String("hello") ? "yes" : "no"); // no System.out.println("hello".equals(new String("hello")) ? "yes" : "no"); // yes
  • 文字列配列の連結
    String.join(",", args);
  • intに変換
    Integer.parseInt("100")*2;
  • 配列の長さはlengthプロパティ、文字列の長さはlengthメソッドなので注意。
    配列.length 文字列.length()
  • 正規表現
    変数.matches(パターン)
    ex) boolean isMatche = name.matches("[A-Z][0-9]{7}");
  • 文字列の分割
    変数.split(パターン)
    ex) String[] words = word.split("[,;]");
  • 文字列置換
    変数.replace(文字列, 文字列)
    変数.replaceAll(パターン, 文字列)
  • 書式整形
    Srting s = String.format("%05d %s", var1, var2);
    出力する場合はSystem.out.printfを使う。
    System.out.printft("%05d %s", var1, var2);

コレクション

Listインターフェース

java.util.ArrayListクラス: サイズ指定不要な配列

ArrayList<String> names = new ArrayList<String>();
names.add("山田");
System.out.println(names.get(0)); 
配列との違い

コレクションフレームワークはインスタンスしか格納することができないため、プリミティブ型はラッパークラスを使う必要がある。
ただし、Javaにはラッパークラスのインスタンスとプリミティブ型データを自動変換するオートボクシングという機能が備わっているため、いちいちInteger.valueOf(1)のようにする必要はない。
そのため、型の宣言はジェネリクスでIntegerを指定するが、int型の値を追加することができる。

ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(100);
nums.add(333);
for (int number: numbers) {
  System.out.println(number); 
}

Setインターフェース

java.util.HashSetクラス

  • 要素を重複なく格納する。
  • 基本的には順序はない。
  • 順序がないのでgetやsetメソッドは存在しない。 要素の取得は拡張for分を使って1つずつ取り出す。
HashSet<String> colors = new HashSet<String>();
  colors.add("赤");
  colors.add("青");
  colors.add("青");
  for (String color: colors) {
    System.out.println(color); // 赤 青
  }
}

Mapインターフェース

要素をkeyとvalueのペアとして格納する。

java.util.HashMapクラス

  • <String, Integer>のようにジェネリクスでキーと値の型を指定する。
  • 順序はない。
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("hoge1", 100);
map.put("hoge2", 333);
System.out.println(map.get("hoge2")); 

Mapは拡張for文を使うことができないので、keySetメソッドで取得したキーの配列を拡張for文で回すのが一般的。

for (String key: map.keySet()) {
  System.out.println(map.get(key)); 
}

ファイルの読み書き

ファイル読み込み

FileReader fr= null;
try {
  fr = new FileReader("./SukkiriwakaruJava/MANIFEST.MF");
  int input;
  while ((input = fr.read()) != -1) {
    System.out.print((char)input);
  }
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (fr != null) {
    try {
      fr.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

ファイル書き込み

FileWriter fw= null;
try {
  fw = new FileWriter("test.txt");
  fw.write("おはよう");
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (fw != null) {
    try {
      fw.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

WEBページ取得

InputStream is = null;
InputStreamReader isr = null;
try {
  URL u = new URL("https://google.com");
  is = u.openStream();
  isr = new InputStreamReader(is, "UTF-8");
  int input;
  while ((input = isr.read()) != -1) {
    System.out.print((char)input);
  }
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (is != null) {
    try {
      is.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  if (isr != null) {
    try {
      isr.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

コメント