JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

java

import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

class WeekRange {
private LocalDate startDate;
private LocalDate endDate;
private boolean updateFlg;
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyyMMdd”);

public WeekRange(LocalDate startDate, LocalDate endDate, boolean updateFlg) {
this

元記事を表示

初心者がpaizaのAランク問題を1か月ちょいで解けるようになった話(Aランク問題の解説付き)

## はじめに
どーも筆者です。私はプログラミング未経験でIT企業に就職し、エンジニアとしてキャリアをスタートさせた若造です。
研修でpaizaに出会い、問題を解くのにどはまりし、プライベートでも問題をちょいちょい解くようになりました。
今回はそんな私がAランク問題を解けるようになるまでと、Aランク問題の解説を行いたいと思います。言語はJavaです。
初心者でどうやったら難しい問題解けるようになるのだろうと困っている人の少しでもお役に立てればと思います。

## 私のpaizaとの向き合い方
初めてコードを見たとき、なんだこれ?英語いっぱいでわけわからん。呪文?状態でした。
なのでまず入門編の講座を見たり、並行して簡単な問題を解いたりしてゆっくりと理解を進めていきました。
ある程度理解が進むと**問題を解くことを中心として、わかんないところが出たり、あれ?これなんだったっけ?ていうのが出るたびに調べてまた解く**というスタイルに切り替えます。このやり方が一番理解が進みます。経験上です。数学と一緒です。
わからなすぎたら回答を見るというのも一つの手です。ただそれを見ただけでは何の身にもな

元記事を表示

Spring Boot 3を使った簡単なTODOアプリの作成

# はじめに
この記事では、Spring Boot 3を使って簡単なTODOアプリを作成する方法を紹介します。TODOアプリは、基本的なCRUD(Create, Read, Update, Delete)操作を通じてSpring Bootの基本を学ぶのに最適です。

# 前提条件
* Spring Boot 3.0
* Java 17以上
* MavenまたはGradle

# プロジェクトのセットアップ
1. Spring Initializrを使用してプロジェクトを生成します。以下の依存関係を追加します。

* Spring Web
* Spring Data JPA
* H2 Database
* Spring Boot DevTools


2. プロジェクトの生成が完了したら、IDEにインポートします。

# ディレクトリ構造
“`
src/main/java/com/example/todoapp
|– TodoAppApplication.java
|– controller
| |– TodoController

元記事を表示

Javaで「パターンとマッチした部分文字列の情報を取得する」の動作を確認してみた

# 概要

Javaで「パターンとマッチした部分文字列の情報を取得する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/regex/index5.html

# 実装

以下のファイルを作成しました。
“`JSample5_1.java
import java.util.regex.*;

class JSample5_1{
public static void main(String[] args){
String regex = “.区”;
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(“東京都港区赤坂”);
if (m.find()){
System.out.println(“Start : ” + m.start());
System.out.println(“End : ” + m.end());
System.out.println(“Match :

元記事を表示

古いJavaライブラリ(crawler4j)の依存関係を整理してみた

# はじめに

[Crawler4jを利用した日本語コンテンツの収集](https://qiita.com/YasuhiroABE/items/4df272fcc0c2cccc4173)で利用しているCrawler4jについてです。

Javaの歴史も長くなってメンテナンスされていないライブラリを使い続けることが難しくなってきました。

ライブラリの変更は互換性のある後継ライブラリが存在しない限り、既存コードを大幅に書き換えることが必要となります。

今回はCrawler4jのオリジナルコードをGithubでForkし、依存関係にあるライブラリを最新版にしつつ再コンパイルしてみました。

ついでに作成したコードをMaven Centralにアップロードしたので、それらの顛末をまとめておきます。

## 目的

とりあえず次の2つが目標です。

1. HarborのScannerで重度の警告が出ない程度に依存パッケージを最新版にする
1. Java 21(LTS)を前提とする

## 成果物

* [https://github.com/YasuhiroABE/crawler4j](ht

元記事を表示

Lombokで提供するコンストラクタのアノテーション探求

## Lombokで提供する3つのコンストラクタ

– Lombokでボイラープレートコードを減らすために提供する3つのコンストラクタ関連のアノテーションについて知ろう
> ボイラープレートコードとは? (Boiler Plate)
– ほとんどまたは全く変更せずに、様々な場所で繰り返されるコード
[ウィキペディア ボイラープレートコード](https://en.wikipedia.org/wiki/Boilerplate_code)

### @ RequiredArgsConstructor

“`java/**
* Generates a constructor with required arguments.
* Required arguments are final fields and fields with constraints such as {@code @NonNull}.
*

* Complete documentation is found at time

import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

class WeekRange {
private LocalDate startDate;
private LocalDate endDate;
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyyMMdd”);

public WeekRange(LocalDate startDate, LocalDate endDate) {
this.startDate = startDate;
this.endDate = end

元記事を表示

【Spring Boot】【Java】定数宣言はfinal staticが良いのか、enumが良いのか

# これまでの記事紹介
| | URL |
|:———–|:————|
| 第1回 | [【Spring Boot】個人的に推奨するディレクトリ/ファイル構成](https://qiita.com/rpc_tk/items/b60adb5e55206585d98a “【Spring Boot】個人的に推奨するディレクトリ/ファイル構成”) |

# はじめに
第1回記事の最後に[domain]-coreについて深堀りしていくと書きましたが、今回はその深掘りの第1弾です。
※[domain]-coreには定数、列挙型を配置するためです

皆さんはJavaで不変な値、いわゆる定数をどのように扱っていますか?
final static修飾子を付けた変数を使うのが良いのか、列挙型を使うのが良いのかを個人的な考えを書いていきます。

# 読者ターゲット
– Java の Web/API アプリケーション開発経験がある方

# 定数とは
定数はある意味で変数ですが、final修飾子を付与することで一度値を代入したら変更できない変数となり、更

元記事を表示

足し算 (paizaランク D 相当) Java解答例

# 問題文
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition

# 解答例
“`java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(a + b);
}
}
}
“`

# 補足
取得した数値を足して出力するだけなので特になし。

元記事を表示

Eメールアドレス (paizaランク D 相当) Java解答例

# 問題文
https://paiza.jp/works/mondai/d_rank_skillcheck_archive/email_address

# 解答例
“`java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String s = scanner.next();
String t = scanner.next();
System.out.println(s + “@” + t);
}
}
}
“`

# 補足
この問題ではローカル部とドメインを@で連結してEメールアドレスとしているが、実際にはなんか細かい仕様があるので実務だとちゃんとその仕様に沿っているか入力チェックしたりする必要がある。
昔居た現場だと単にフォーマットが仕様に沿っているかだけでなく実在しているかどうかまでチェックしていたので、どの程度チェックす

元記事を表示

何をテストすべきだろうか?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815412/2e2884d3-f75e-e44d-93b6-9d62a1f9a3ab.png)

## 序論

テストコードに初めて触れるときや、テストコードを書こうとするときに、私の場合、2つの疑問が生まれました。

– どうしてテストを行わなければならないのか?
– 何をテストするべきなのか?

## なぜテストが必要なのか?

> コードの信頼性を確保するために

– 品質保証
– デバッグコストの削減
– ドキュメント化、ドメイン駆動開発、アジャイル方法論、エクストリームプログラミングの実現など ..

しかし、私にはそれほどピンと来ませんでした。そこで、これらを簡単に整理してみました

XPエコシステムから生まれたアジャイル開発論を採用したドメイン駆動開発の観点から説明します。

ソフトウェア開発において最も重要な要素は「ユーザー」です。そして、ユーザーのニーズは常に変化します。プロジェクトを開始する時点では、要件

元記事を表示

【殿堂入りキャンペーン】N倍の文字列 (paizaランク D 相当) Java解答例

# 問題文
https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square

# 解答例
“`java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int n = scanner.nextInt();
for (int i = 0; i < n; i++) { System.out.print("*"); } System.out.println(); } } } ``` # 補足 特になし。 基本的に*をn個分出力すれば良いだけだが、最後は改行しないといけないようなので`System.out.print`と`System.out.println`を使っているくらい。

元記事を表示

【Java】SQLiteのJDBCドライバを用いる際のデータベース接続文字列に関する注意点

# 環境
– Windows11
– Tomcat9
– OpenJDK11
– SQLite3

# パスは”/(スラッシュ)”で区切る
Mac上のEclipseで開発した後、Windowsマシンにデプロイをした際に、「データベース接続文字列中のパスは、Windowsだから”¥”(実際のコード上ではバックスラッシュで表示される。)で区切るのだろう」とデータベース接続文字列中のスラッシュをバックスラッシュに書き直したところ、データベースに接続することができなかった。
データベース接続文字列は、Windowsにおいてもスラッシュで区切る。
“`diff_java:コネクションオブジェクトの取得部分
– Connection conn = DriverManager.getConnection(“jdbc:sqlite:C:\mydb\sample.db”);
+ Connection conn = DriverManager.getConnection(“jdbc:sqlite:C:/mydb/sample.db”);
“`

元記事を表示

Javaで「文字列の中でパターンとマッチする部分があるか検索する(Matcher.find)」の動作を確認してみた

# 概要

Javaで「文字列の中でパターンとマッチする部分があるか検索する(Matcher.find)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/regex/index4.html

# 実装

以下のファイルを作成しました。
“`JSample4_1.java
import java.util.regex.*;

class JSample4_1{
public static void main(String[] args){
String regex = “[0-9]{2}”;
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(“CODE24-11-75”);
if (m.find()){
System.out.println(“マッチしました”);
System.out.println(m.group());
}
}
}
“`

以下のコマンドを実行しまし

元記事を表示

【初心者向け】SQLクエリの句 抽出順番について

今回の記事は「SQLの抽出順番を理解することでそれぞれの句の意味がすんなり理解できるかも」というお話。

まずSQLの句ってどんなものがあるか見ていきましょう。
上から記載する順番に見ていきます。

“`
句の種類について
①SELECT句: 抽出する列を指定
②FROM句: データを取得するテーブルを指定
③WHERE句: 行のフィルタリング条件を指定
④GROUP BY句: 行をグループ化する列を指定
⑤HAVING句: グループ化後にグループをフィルタリングする条件を指定
⑥ORDER BY句: 結果セットを並べ替える条件を指定
“`

具体的なコード
“`SQL
SELECT 店舗名, SUM(売上) AS 総売上 –「店舗名」と「総売上」を表示する。
FROM 売上テーブル –「売上テーブル」から見つける。
WHERE 地域 = ‘関東’ –「地域」というカラム(列)に「関東」と含まれている場所を見つける。
GROUP BY 店舗名 –「店舗名」の順番でグループ化。
HAVING SUM(売上) > 100000 –「総売上」は「100000」以上という条件。

元記事を表示

Javadocの@throwsタグを記載しなくてはいけない時

Javadocの“`@throws“`タグを記載しなくてはいけないのはどんな時なのかが分からず、[公式サイト](https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html)を見ても知識不足で意味が分からなかったので、ざっくり嚙み砕いてメモしておく。

“`TeX:公式サイトより
Throws Tag

The purpose of the @throws tag is to indicate which exceptions the programmer must catch (for checked exceptions) or might want to catch (for unchecked exceptions).

Guidelines – Which Exceptions to Document

Document the following exceptions with the @throws tag:

・All checked exceptions.
 (These

元記事を表示

検査例外(Checked Exception)、非検査例外(Unchecked Exception)とは?

# 目次
[結論](#結論)
[例外の3つの種類](#例外の3つの種類)
[検査例外(Checked Exception)](#検査例外checked-exception)
[検査例外(Exception)](#検査例外exception)
[非検査例外(Unchecked Exception)](#非検査例外unchecked-exception)
[発生する検査例外を調べる方法](#発生する検査例外を調べる方法)
[実行時例外(RuntimeException)](#実行時例外runtimeexception)
[エラー(Error)](#エラーerror)
[参考サイト、参考文献](#参考サイト参考文献)

# 結論
– javaでは、[Throwable][1]なクラスの中で、[Errorクラス][2]と、[RuntimeExceptionクラス][3]
を継承したクラスのみ非検査例外(Unchecked Exception)で、他は全て検査例外(Checked Exception)

ドメイン駆動設計(DDD)についての整理

## 序論
ドメイン駆動開発(以下、DDDと記述します。)について、誤解していたことや新たに学んだことについて書いてみます。

##ドメインとは何か?
まず始めに、「ドメインとは何か?」という質問に答えられなければなりません。一体「ドメイン」とは何でしょうか?何故それを基にして開発を行う必要があるのでしょうか。

この質問に対する答えとして、エリック・エヴァンスは著書『ドメイン駆動設計』の第1部で次のように述べています。

>「すべてのソフトウェアプログラムは、そのソフトウェアを使用するユーザーの活動や関心事に関連しています。ユーザーがプログラムを使用する対象領域が、そのソフ> トウェアのドメインです。」

これだけではまだピンとこないかもしれません。そこで今度は、「一体ソフトウェアって何なのか?」という疑問が生まれるかもしれません。

著者は続けて本の中で次のように述べています。

> 「ソフトウェアの本質は、そのソフトウェアのユーザーのためにドメインに関連する問題を解決する能力にあります。」

## ドメインモデルを作る過程
そうです。ソフトウェアのユーザー(以下、ユーザーと呼びま

【随時更新】よく使うSpringBoot3アノテーションまとめ

## Springアノテーション
– `@Component`
– Springコンテナに対して、このクラスがコンポーネント(Bean)であることを示し、Beanに登録する
– `@ConfigurationProperties`
– 外部設定ファイル(例:application.properties)からプロパティを読み込むためのクラスに付与する
– `@Repository`
– データアクセス層のBeanを示す

## Lombokアノテーション
– `@AllArgsConstructor`
– すべてのフィールドを引数に取るコンストラクタを生成する
– `@Data`
– @Getter、@Setter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCodeを一括で適用する
– `@EqualsAndHashCode`
– equals()とhashCode()メソッドを生成する
– オプション
– callSuper(デフォルト:false)

Clean Code – Chapter 2: 意味のある名前

# 2章 意味のある名前
[Clean Code アジャイルソフトウェア達人の技](http://www.amazon.co.jp/Clean-Code-%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%81%94%E4%BA%BA%E3%81%AE%E6%8A%80-Robert-Martin/dp/4048676881)の本を整理した内容です

## 概要

## 1. 意図を明確にする

皆さんも経験しているように、