CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

2016-07-01から1ヶ月間の記事一覧

第9章 Java 7 の機能を復習する : 問題 11 : ProcessBuilder

問題 ProcessBuilderクラスを使って、ユーザーのホームディレクトリの全てのサブディレクトリ内の全てのファイルからクレジット番号を探すために "grep -r" を呼び出すプログラムを作成せよ。 そして、ファイル内で見つけた番号を収集せよ。 解答 クレジット…

第9章 Java 7 の機能を復習する : 問題 10 : java.util.Objects クラス その 2

問題 次のLabeledPointクラスのcompareToメソッドを実装せよ。 public class LabeledPoint { private String label; private int x; private int y; ... } 解答 Java 8 で導入されたComparatorの default メソッドthenComparingを使えば一発なんだけど、ここ…

第9章 Java 7 の機能を復習する : 問題 9 : java.util.Objects クラス

問題 次のLabeledPointクラスのequalsメソッドとhashCodeメソッドを実装せよ。 public class LabeledPoint { private String label; private int x; private int y; ... } 解答 java.util.Objects クラスを使用する。 ■ equalsメソッド public boolean equal…

第9章 Java 7 の機能を復習する : 問題 8 : Integer.compare と Integer#compareTo

問題 整数の X 座標と Y 座標をフィールドに持つPointクラスのcompareToメソッドを、Integer#compareToを使わないで実装せよ。 public int compareTo(Point other) { int diff = Integer.valueOf(x).compareTo(other.x); if (diff != 0) return diff; return…

第9章 Java 7 の機能を復習する : 問題 7 : Files.copy の威力

問題 URL.openStreamとFiles.copyを使って、Web ページの内容を読み込んで、ファイルに保存するプログラムを作成せよ。 解答 私のはてなブログをファイルに書き出してみよう。 URL url = new URL("http://closedunbounded.hatenablog.com/"); try (InputStre…

第9章 Java 7 の機能を復習する : 問題 6 : Files.readAllLines の威力

問題 Files.readAllLinesとFiles.writeを使って、ファイルから全ての行を読み込み、逆順に書き出すプログラムを作成せよ。 解答 ファイルの文字コードは UTF-8 と仮定する。 List<String> lines = Files.readAllLines(Paths.get("/usr/share/dict/words")); Collecti</string>…

第9章 Java 7 の機能を復習する : 問題 5 : Files.readAllBytes の威力

問題 Files.readAllBytesとFiles.writeを使って、ファイルから全ての文字を読み込み、逆順に書き出すプログラムを作成せよ。 解答 ファイルの文字コードは UTF-8 と仮定する。 byte[] bytes = Files.readAllBytes(Paths.get("/usr/share/dict/words")); Stri…

第9章 Java 7 の機能を復習する : 問題 4 : 複数例外と共通のスーパークラス

問題 Java ライブラリを使用しているとき、複数例外をキャッチすることで恩恵を得られる状況に遭遇したライブラリは何か? 解答 JAXP ライブラリ(javax.xml のサブパッケージ)でありがたいと思った。 例えば、XML ファイルを読んで DOM オブジェクトを生成…

第9章 Java 7 の機能を復習する : 問題 3 : 複数例外のキャッチ

問題 複数の例外をキャッチするcatch節の中でその例外を再度スローする場合に、その処理が書かれているメソッドでのthrows宣言はどのように宣言すればよいか? 次の例で答えよ。 public void process() throws ??? { try { ... } catch (FileNotFoundExceptio…

第9章 Java 7 の機能を復習する : 問題 2 : 抑制された例外

問題 以下のコードを try-with-resources 文を使わず、かつcloseメソッドでスローされる例外を抑制された例外として元の例外に追加するように実装せよ。 ■ try-with-resources 文を使った例 try (BufferedReader in = Files.newBufferedReader(Paths.get("/u…

第9章 Java 7 の機能を復習する : 問題 1 : try-with-resources 文

問題 以下のコードを try-with-resources 文を使わないで実装せよ。 try (Scanner in = new Scanner(Paths.get("/usr/share/dict/words")); PrintWriter out = new PrintWriter("/tmp/out.txt") ) { while (in.hasNext()) out.println(in.next().toLowerCase…

第9章 Java 7 の機能を復習する

Java 7 の変更点は、Java 5, Java 8 に比べればそんなに大きくない(InvokeDynamic は大きな変更だけど、いかんせん地味だ)。 私的には、Java 7 の最大の変更点は try-with-resources 文である。 この章は、第8章の “その他の Java 8 機能” と同じぐらいの…

第8章 その他の Java 8 機能を理解する : 問題 16 : 正規表現の名前付きキャプチャグループ

問題 市(city)、州(state)、郵便番号(zip code)を含む行を解析するために、名前付きキャプチャグループを用いた正規表現を使用せよ。 郵便番号は、5桁と9桁(5桁ハイフン4桁)の両方を受け付けるようにせよ。 解答 本文には、市(city)と州(state)の2つをピッ…

第8章 その他の Java 8 機能を理解する : 問題 15 : 簡易 grep

問題 Files.linesとPattern#asPredicateを使用して、与えられた正規表現に一致するすべての行を表示する grep のようなプログラムを書け。 解答 機能をいろいろ盛り込みたいところだけど、ここは簡潔に以下のような仕様とする。 第1引数は正規表現の式、第2…