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

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

Javaで「文字列の最後に別の文字列を連結する」の動作を確認してみた

# 概要

Javaで「文字列の最後に別の文字列を連結する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index15.html

# 実装

以下のファイルを作成しました。
“`JSample15_1.java
class JSample15_1{
public static void main(String[] args){
String str = “東京都”;

System.out.println(str.concat(“港区赤坂”));
System.out.println(str + “港区赤坂”);
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample15_1.java
$ java JSample15_1
東京都港区赤坂
東京都港区赤坂
“`

# まとめ

何かの役に立てばと。

元記事を表示

BASIC言語のインタープレタをJavaで作る話

このweb記事を読んだ。

– [“Easy intro to writing a BASIC interpreter (with ANTLR)” by Matei, Nov_2017](
https://mateiw.github.io/antlr-intro/)

この記事は[BASIC](https://ja.wikipedia.org/wiki/BASIC)言語のインタープレターをJava言語で実装した事例である。BASIC言語の文法を記述したファイルをパーサー・ジェネレータ[ANTLR](https://www.antlr.org/)に与える。ANTLRがパーサを構成するJavaコードを生成する。自動生成されたコードを利用する形でインタープレタをJava言語で実装している。ビルドツールMavenを用いている。

わたしはこの記事が紹介するJavaコードを写経して動かしてみた。そのコードはよくできていてほとんど修正不要だった。それでもいくつか課題にでくわした。

わたしが見つけた解決方法を記述し公開しようと思う。

## 前提条件

わたしは下記の環境で作業した。

元記事を表示

Javaで日付をインクリメンタルにフォーマットする方法:IncrementalDateFormatterクラスの使い方

# IncrementalDateFormatterの使い方

この記事では、Javaで日付をインクリメンタルにフォーマットするためのIncrementalDateFormatterクラスの使い方について説明します。このクラスは、指定した初期日付から特定の時間単位ごとに日付をインクリメントし、フォーマットされた日付文字列を生成します。

# クラスの概要
IncrementalDateFormatterクラスは、以下のパラメータを使用して初期化されます。

“`
pattern:日付のフォーマットパターン(例:”yyyyMMdd-HHmmss”)。
initialDate:初期の日付文字列。
calendarUnit:日付をインクリメントするカレンダーの単位(例:Calendar.HOUR_OF_DAY)。
amount:インクリメントする量。
repeat:インクリメントを繰り返す回数。
“`

# 使用例

以下は、IncrementalDateFormatterクラスを使用して日付をインクリメントする方法を示すテストコードです。このテストでは、初期日付を「2024/1/1

元記事を表示

Jettyベースで作ったWebアプリケーションを1個のJARにまとめて配布する

# 目的

Java で動作するWebアプリケーションをJARファイル1つにまとめて配布することが目的です。簡単なのかと思いきや意外にコツが必要でした。

# Maven

## ディレクトリ構造

Mavenプロジェクトのディレクトリ構造は以下のようになっているものとします。標準的な構造かと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110265/a14384ca-238a-e7ea-119d-03d95c2631d1.png)

# Main クラス

“`java
package nlp4j.servlet;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppCont

元記事を表示

【Spring Boot】メール送信機能と照合

## はじめに
・今回は最近(?)よく見かけるユーザ新規登録時、入力されたメアドにコードを送信する方法とその認証までの記事になります。
・バリデーションなどかけていますが、そこについては説明は省かせていただきます。
[【Spring Boot】Validation(入力チェック)+DB保存までをうまく](https://qiita.com/whats-up-everyone/items/d7907e6bf511b3215eb8)
・DBとの連結方法も省略します。
・今回作成するのは以下のようなもの
↓メアド入力画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830719/1a0af76f-78c6-4744-758d-f572715dab26.png)

↓認証コードの入力画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830719/1cff3717-8a12-222b-1a3

元記事を表示

【Spring Boot】Validation(入力チェック)+DB保存までをうまく

## はじめに
#### 環境
・`Eclipse(2024)`
・`Spring Boot 3.3.0 (Maven)`
・`MariaDB`
※DBとの連携は済んでいる前提とします。

#### 作成する画面は3種類
↓1.メインとなる入力画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830719/99c8e86b-1459-e80c-841a-7e0df0c903e6.png)
↓2.入力確認画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830719/f362927b-ce86-8609-0343-575118973285.png)
↓3.完了画面(一応)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830719/3ff23d18-778d-564c-23ac-55

元記事を表示

Javaで「文字列に含まれる文字を大文字または小文字に変換する」の動作を確認してみた

# 概要

Javaで「文字列に含まれる文字を大文字または小文字に変換する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index14.html

# 実装

以下のファイルを作成しました。
“`JSample14_1.java
class JSample14_1{
public static void main(String[] args){
String str1 = “TeaCup”;
String str2 = “Mouse”;

System.out.println(str1);
System.out.println(str1.toUpperCase());
System.out.println(str1.toLowerCase());

System.out.println(str2);
System.out.println(str2.toUpperCase());
System.out.println(str2

元記事を表示

[Java] 有限差分法で梁のたわみを求める

# はじめに
Javaと材料力学の復習をかねて作成した。

# 原理
## たわみの基礎式の離散化
分布荷重$p(x)$が加わるヤング率$E$,断面二次モーメント$I$の梁のたわみ$y$は以下の式から求まる。
“`math
\frac{d^4y}{dx^4} = \frac{p(x)}{EI}
“`

ここで4階の数値微分を以下の式で計算する。
“`math
\frac{d^4y}{dx^4} \sim \frac{y_{i-2}-4y_{i-1}+6y_{i}-4y_{i+1}+y_{i+2}}{{\Delta x}^4}
“`
よってたわみの基礎式の離散化は以下の式となる。

“`math
\frac{y_{i-2}-4y_{i-1}+6y_{i}-4y_{i+1}+y_{i+2}}{{\Delta x}^4} = \frac{p(x_i)}{EI}
“`

“`math
\frac{1}{{\Delta x}^4}
\begin{bmatrix}
1 & -4 & 6 & -4 & 1\\
\end{bmatrix}
\begin{bmatrix}
y_{i-2}

元記事を表示

SpringSecurityの仕組みの初歩と実装例

# この記事に書いてあること
– [プロになるためのSpring入門](https://gihyo.jp/book/2023/978-4-297-13613-0)のSpringSecurityに関する内容を読んだまとめ
– SpringSecurityを使った実装例

# SpringSecurityとは
SpringFrameworkの認証認可を実現するための仕組み。
## 認証とは
アプリケーションを使用するユーザーを特定すること。
## 認可とは
認証したユーザーが行った操作の可否を制御すること。

## 認証認可はなぜ必要か
認証認可の実装がされていないと多くのアプリケーションの機能は成り立たない。
例えばSNSであれば投稿された内容は全てのユーザーが見えるようにしつつ、投稿の編集・削除は投稿したユーザーにしかできないようにする、というような制御が必要になる。

# SpringSecurityを使った実装
## 認証とリクエスト単位での認可
### 概念
認証処理はあらゆるアプリケーションの処理を実行する前に行う必要がある。
SpringSecurityではServletFi

元記事を表示

【Java】日付の型変換を楽に一括管理するためのクラスを考えてみた

javaでは日付を扱う型が色々ありややこしいため、統合して管理できるパースクラスのようなものを用意できないか考えてみました。
* java.util.Date
* java.sql.Date
* java.Timestamp
* java.time.LocalDate
* java.time.LocalDateTime

今回はクラスのフィールドに`long time;`のようなミリ秒の情報を保持し、これを経由してそれぞれの型変換を実現してみます。
作成したクラスが以下です。

“`java
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class DateParser {

private ZoneId zoneId;
private final long time;

public DateParser(long time) {
this.time = time;
this.

元記事を表示

PHPで.propertiesファイルを使う

## プロパティファイル好きです!

こんばんは!私はとある大手企業で教育関係のお仕事をしています。

最近はJavaの新卒研修に参加して講義をしました。

はじめて3カ月も講義をして何より**自分が1番学んでました!**

## JavaといえばgradleかMaven!

JavaではXMLなMavenと.propertiesファイルのようなものを使うGradleの2択だった気がします。

JavaはYAML使わずにXMLのほかにpropertiesを使うことが多かった気がします。

しかし、PHPではほとんど使いません。

## そもそもPHPを使っている人がいない

みなさんPythonを使っているし私もFlaskやDjangoを使ってきました。

しかし問題があって、**PythonはWebと相性がそこまでよくない**というところがあります。

つまり、われわれがVPSを借りてウェブのサービスを始めようとなったときに

ほぼ100パーセント使うのが**Apache**となっており、PythonもいけるんですがPHPと比べると格段に面倒くさいです。

## Javaの習得は絶

元記事を表示

Javaで「文字列の先頭と末尾から空白文字を取り除く」の動作を確認してみた

# 概要

Javaで「文字列の先頭と末尾から空白文字を取り除く」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index8.html

# 実装

以下のファイルを作成しました。
“`JSample8_1.java
class JSample8_1{
public static void main(String[] args){
String msg1 = ” AB CD “;
String msg2 = “\tAB CD\n”;
String msg3 = “ AB CD ”;

System.out.println(“[” + msg1 + “]”);
System.out.println(“[” + msg1.trim() + “]”);
System.out.println(“[” + msg2 + “]”);
System.out.println(“[” + msg2.trim() + “]”);
System.o

元記事を表示

Javaの継承とオーバーライドについて

## 背景
Javaの資格勉強をしている際に、なかなか理解できなたったところの備忘録。
きっとJavaを触り始めた人でもなかなか難しいところ(のはず)だと思うので、わかりやすく簡単に書くよ。

以下のキーワードを踏まえたうえで、解説していくよ。
### キーワード
“`
継承:クラスの中身の変数やメソッドをそのまま受け継がせること。
オーバーライド:スーパークラスのメソッドと戻り値の方、メソッド名、シグニチャが同じメソッドを再定義できること。
“`
## 継承とオーバーロード
早速だけど説明するよりコードを見た方がはやいのでサンプルコードを書くよ。
“`java
1. class SuperSample {
2. String val = “Super”;
3. void print() {
4. System.out.print(val);
5. }
6. }
7.
8. class SubSample extends SuperSample {
9. String val = “Sub”;
10. }
“`

元記事を表示

これは便利でもう手放せない!Eclipseショートカット集

![24725598_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633992/c25dcc3b-5f97-21fa-5006-ac903c1055fa.jpeg)

エスプリフォートでは、業務内でのシステム開発以外でも、日々アンテナを張りながら仲間同士お互いに技術力を磨き合っています。
効率化もその一つで効率を向上させることにより、3M(ムリ・ムダ・ムラ)を無くしていき、顧客のための時間と予算を如何に作っていくのかということを考え、顧客から頼られる存在としてあり続けています。

今回はその効率化の基本となるEclipseのショートカットをご紹介いたします。

# はじめに
Javaを使用したソフトウェア開発では、その開発ツールとしてEclipseがよく使用されます。
Eclipseにはショートカットが標準で用意されており、これを覚えていくことで、プログラミングの効率アップが期待できます。

そこで「これすごく便利!」なEclipseのショートカットを、いくつかご紹介します。[^1]

[^1]

元記事を表示

MavenでMyBatis Generatorを使う

# 環境
– JDK 21
– Maven 3.9.7
– MyBatis Generator 1.4.2
– PostgreSQL 15.3
– Spring Boot 3.3.1

# 公式ドキュメント
https://mybatis.org/generator/running/runningWithMaven.html

# pom.xmlの設定
今回はSpring Bootを使っていますが、MyBatisさえ入っていれば大丈夫なはずです。

“`xml:pom.xml

元記事を表示

【Spring Boot】SpringSecurityのログイン時の処理のカスタマイズ

## 概要
・Spring Securityを使用してログイン機能を実装していることを前提とします。
・今回、私がカスタマイズした処理の内容は【ログイン成功時にその日時を最終ログイン日時としてDBに保存する】という処理です。

※初記事なので分かりにくい場合や間違えてる場合等があるかもしれませんのでご了承ください…

## 実行環境
・Eclipse(2024)
・Spring Boot 3.3.0
・Spring Security 6

## 手順
### 1.CustomAuthenticationSuccessHandlerクラスの作成
 ・AuthenticationSuccessHandlerインターフェースを実装したカスタムハンドラを作成します。
 ・ログイン成功時にユーザの最終ログイン日時を更新するロジックを実装します。

### 2.ユーザサービスの作成
 ・ユーザの最終ログイン日時を更新するためのメソッドを含むサービスクラスを作成します。

### 3.セキュリティ設定の更新
 ・カスタムハンドラをSpring Securityの設定に登録します。

###

元記事を表示

Javaで「文字列から開始と終了インデックスを指定して部分文字列を取得する」の動作を確認してみた

# 概要

Javaで「文字列から開始と終了インデックスを指定して部分文字列を取得する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index7.html

# 実装

以下のファイルを作成しました。
“`JSample7_1.java
class JSample7_1{
public static void main(String[] args){
String msg = “東京都港区赤坂”;

System.out.println(msg.substring(3, 5));
System.out.println(msg.substring(5, 7));
System.out.println(msg.substring(3));
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample7_1.java
$ java JSample7_1
港区
赤坂
港区赤坂
“`

# まとめ

何かの役に立てばと。

元記事を表示

BFSを用いた硬貨の組み合わせ問題の解決方法

# BFS(幅優先探索)の簡単な説明
幅優先探索(BFS:Breadth-First Search)は、グラフやツリーなどのデータ構造を探索するためのアルゴリズムの一つです。BFSは、開始ノードから近いノードから順に、同じレベルのノードをすべて探索してから次のレベルに進むという方法で動作します。BFSは通常、キュー(FIFO)を使用して実装されます。

BFSの主な特長は以下の通りです:
1. 最短経路探索:BFSは無加重グラフでの最短経路探索に適しています。最初に到達した解が最短であることが保証されます。
2. レベル順探索:BFSはノードをレベル順に探索するため、ノード間の距離を簡単に把握できます。

# 問題の解法の説明
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824062/2805f5f2-63c8-39e5-b437-63f74390ea0c.png)

以下は、与えられたシングルリンクリストを0を基準に値をマージする問題の解法をBFSを用いて説明したものです。

問題

元記事を表示

深さ優先探索(DFS)を用いたシングルリンクリストのノードマージ問題の解決方法

# DFSの簡単な説明
深さ優先探索(DFS:Depth-First Search)は、木やグラフなどのデータ構造を探索するためのアルゴリズムの一つです。DFSは、可能な限り深くノードを探索してから次の分岐に進むという方法で動作します。再帰やスタックを使って実装することが多いです。

# 問題の解法の説明
以下は、与えられたシングルリンクリストを0を基準に値をマージする問題の解法をDFSを用いて説明したものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824062/3566b1cd-2ac8-7256-3fb0-464bfdb2c1f1.png)

“` java
/**
* シングルリンクリストのノードを定義するクラス。
*/
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
Li

元記事を表示

2024/07/04の備忘録

### 【データべースなどから取得した情報をJSONで形式で表示する】
今回はデータベースから直接値を取るのではなく、スタブを使ってJSON形式に変換する。
ItemCategoryのスタブデータの作成。
最終的に4件の情報が入ったデータを返している。
“`Stub.java
public static List returnStb(){

List categorys = new ArrayList();

int totalMin = 100;
int totalMax = 1000;

for(int i = 0; i <= 3; i++) { ItemCategory category = new ItemCategory(); category.setId(i + 1); category.setName("カテゴリ" + i + 1); category.setMinPrice(totalMin); category.setMaxPrice

元記事を表示

OTHERカテゴリの最新記事