JAVA関連のことを調べてみた2023年07月29日

JAVA関連のことを調べてみた2023年07月29日

OpenAIとJavaでAIアシスタントを実装する

こんにちは、皆さん。今回はAI技術に興味を持つプログラマーの皆さんに向けて、OpenAIとJavaを使ってAIアシスタントを作成する方法について解説します。

# 問題点

AI技術は日々進化しており、その応用範囲は広がり続けています。その中でもAIアシスタントは、私たちの生活にとても便利な存在となっています。しかし、一方で、その具体的な作成方法については必ずしも明確に説明されているわけではありません。そのため、自身でAIアシスタントを作りたいと思っても、どう始めてよいか迷ってしまう方も少なくないでしょう。

# 解決方法

この問題を解決するために、今回はJavaとOpenAIを使ったAIアシスタントの作り方を具体的に解説します。サンプルコードを元に、順を追って説明していきます。サンプルコードは[こちらのGitHubリポジトリ](https://github.com/blue-islands/gpt4-java-sample)にあります。

# Maven設定

このプロジェクトを進めるにあたって、まず必要となるのが依存関係の設定です。`pom.xml`内に以下のように記述して、必要

元記事を表示

Maven の使い方

こちらの記事と同じ事を行いました。
[Maven で Java プロジェクトの構築](https://spring.pleiades.io/guides/gs/maven/)

## 使うソフト

Java のバージョン

“`text
$ java –version
openjdk 20.0.2 2023-07-18
OpenJDK Runtime Environment (build 20.0.2+9)
OpenJDK 64-Bit Server VM (build 20.0.2+9, mixed mode, sharing)
“`

Maven のバージョン

“`text
$ mvn –version
Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946a785a163f14e1e29)
Maven home: /opt/maven
Java version: 20.0.2, vendor: N/A, runtime: /usr/lib/jvm/java-20-openjdk
Default locale: en, platform

元記事を表示

React,Javaアプリケーションでカレンダー機能実装

# 最初に
今回の記事は[React + SpringBootアプリ 簡易まとめ](https://qiita.com/Sesoniso/items/3c1beb243a093d80e247)の記事の続きで旅行予約管理アプリケーションの**カレンダー機能実装**についてまとめようと思います。
カレンダー機能実装にはReactのReact Datepickerを使用し、[こちら](https://reactdatepicker.com/)のサイトを参考にして実装しました。

本記事の完成画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645309/0a5cbf77-c6f0-9874-3d4e-6b41fae09963.png)

# 1. サンプルコード
“`js
import axios from “axios”;
import React, { useEffect, useState } from “react”;
import ReactDatePicker from “r

元記事を表示

[Java] 正規表現

# はじめに
### 正規表現とは
* 特殊な記号とか構文を使って文字列パターンを指定し、対象の文字列とマッチするか調べるやつです
* Stringクラスの`matches`メソッドを使い判定を行います
* `matches`メソッドのように、文字列がマッチするか処理することを`パターンマッチング`といいます
* matchesメソッドの戻り値は`boolean`。真偽値を返す(tureかfalse)
### 文字列パターン(パターン)
* `”[A-Z] [A-Z0-9] {7}”`このような文字列を指す
# 正規表現の基本文法
## 通常の文字
* パターン内に記述された一般的な文字はそれと同じ文字を表す
たとえば`”ABC”`は「1文字目がA、2文字目がB、3文字目がCである」という条件を示す
## ピリオド
* 任意の`1文字`であればよい
パターン中にピリオド記号(.)があった場合、その部分に任意の1文字(なんでもいい必ず1文字)があらばよい

## アスタリスク
* 直前の文字の`0回以上の繰り返し`
パターン中にアスタリスク(*)が含まれていた場合、直前の文字の`0回以

元記事を表示

Javaでディレクトリを中身ごと消す方法

Javaの標準APIにはディレクトリを中身ごとごっそり消すというのが無い。
Files.walk()で中身まで再帰的に取得できるけど、中身のほうが後に来るからそのままでは消せない。

中身が後に来ることもあるというのではなく、中身が後と仕様で決められているので、逆順にすれば消せる。
“`java
Files.walk(Path.of(“tmp”))
.map(x -> Stream.of(x))
.reduce(Stream.empty(), (x, y) -> Stream.concat(y, x))
.forEach(x -> x.toFile().delete());
“`
ソートするとコストはnlognなので、これより重くなるはず。

元記事を表示

【Java】Word文書の空白行を削除する方法

スキャンや変換などで作成されたWord文書には、非常に多くの空白行がある場合があります。 これらは文書の書式を混乱させ、文書の外観に影響を与え、読みにくくする可能性があります。 そのため、文書の可読性と美観を高めるためには、これらの空白行を削除する必要があります。 この記事では、無料の[Free Spire.Doc for Java](https://jp.e-iceblue.com/introduce/free-spire-doc-for-java.html)を使用して、Javaプログラム経由で**Word文書から空白行をすばやく削除する方法**を紹介します。

– **[Word文書内のすべての空白行を削除する](#word文書内のすべての空白行を削除する)**

### 【依存関係の追加】
この記事の方法は、無料のWord文書処理Java API、Free Spire.Doc for Javaが必要です。このAPIは、[公式サイト](https://jp.e-iceblue.com/download/free-spire-doc-for-java.html)からダウンロードするか

元記事を表示

初めて要件定義を担当した話

この度弊社[イマジテック](https://imagitech.io/)は自社サービスを新規開発することにしました。

新規開発とのことで最初にすべきことはもちろん
**要件定義です。**

本記事では上流工程の経験がない四年目エンジニアが
要件定義フェーズで得た知見、苦悩を工程に沿ってつらつらと書き記します。

# 目次

[1.要件のヒアリング](#1-要件のヒアリング)
[2.要件定義書作成で壁にぶつかる](#2-要件定義書作成で壁にぶつかる)
[3.非機能要件の山にぶつかる](#3-非機能要件の山にぶつかる)
[4.おわりに](#4-おわりに)
[5.予告](#5-予告)

# 1. 要件のヒアリング

本プロジェクトの初期案は弊社代表発なので、[代表](https://twitter.com/nakai_imagitech)からお話を伺いました。
サービスのイメージ、そのサービスを思いついた理由などなどを聞きました。

ヒアリングを通してイメージの共有ができました。

ここまでは特に問題なく進んでいたつもりでした。

# 2. 要件定義書作成で壁にぶつかる

サービス内容を

元記事を表示

Javaのmainメソッドについて学習してみた

# 概要
Javaのmainメソッドについて学習してみました。以下のページを参考にしました。

mainメソッドと引数

https://www.javadrive.jp/start/main/

引数を指定してmainメソッドを呼び出す

https://www.javadrive.jp/start/main/index1.html

コマンドライン引数の数を確認

https://www.javadrive.jp/start/main/index2.html

# まとめ
何かの役に立てばと。

元記事を表示

結構、間違ってる”浮動小数”の理解。概数、真数というデータ型

# 浮動小数点数と固定小数点数

浮動小数点数(float/double)と固定小数点数について、基本的な情報処理の知識としてみなさま学びますね。
そして、float/doubleは少数使いたくなったらプログラムでも気軽に使いますね。

「小数点の管理の仕方の違い」と習いますが、実際には非常に重要な機能の違いがあります。

# 0.1 + 0.2 => 0.30000000000000004

* 浮動小数点数 => ほとんどの少数は表現できないおおよその数字
* 固定小数点数 => 少数を表現できる実際の数字

浮動小数点数がどのぐらいおおよそかといえば、↓ぐらいデタラメ

“`javascript
0.1 + 0.2
=> 0.30000000000000004

0.1 + 0.7
=> 0.7999999999999999
“`
↑はJavaScriptで一瞬で再現可能。

`フロントエンドでお金の計算するの怖い`という時に使いましょう

# 2進数で無限小数になる数は表現できない

浮動小数点数が誤差を生じる理由は、2進数で無限小数になる数を正確に表現できないためです。

元記事を表示

初心者がJava WebアプリケーションをAzureにデプロイした話

勉強の一環で、Servlet/JSPを使ったWebアプリケーションをチーム開発で制作中です。その際実践したAzureへのデプロイ手順をまとめてみました。

# やりたいこと
1. Eclipseで作った動的WebアプリケーションをAzureにデプロイしたい
→ [Azure Toolkit for Eclipse](https://learn.microsoft.com/ja-jp/azure/developer/java/toolkit-for-eclipse/)で解決

2. WebアプリケーションからJDBCでAzureに建てたDBサーバに接続できる状態にしたい
→ [Azure SQL Database](https://learn.microsoft.com/ja-jp/azure/azure-sql/database/?view=azuresql-db)を作成することで解決

3. 勉強目的なので、無料ですべて済ませたい
→ [Azureの無料アカウント](https://azure.microsoft.com/ja-jp/free)を作ることができるっぽい(**※筆者未確

元記事を表示

[Java] Char型の文字比較

# はじめに
今回は参考にしている書籍のあるコードを疑問に思ったので理解するまでの課程です
“`java
public class Check {
public boolean isValidPlayerName(String name) {
if (name.length() != 8) {
return false;
}

char first = name.charAt(0);

if (!(first >= ‘A’ && first <= 'Z')) { System.out.println("最初の文字に数字は使えません"); return false; } for (int i = 1; i < 8; i++) { char c = name.charAt(i); if (!((c >= ‘A’ && c <= 'Z') || (c >= ‘0’

元記事を表示

【JavaGold】Connectionインタフェース

## 概要
DBMS(DataBaseManagementSystem)[^1]との接続を管理するインタフェース。
主な役割は、以下のようなデータベースとの接続に関連する操作を提供することである。
[^1]:多くのデータが集まった時にデータを管理し、操作するためのソフトウェア。

#### 主な役割
1. データベースへの接続の確立と切断
2. SQLクエリの実行
3. トランザクションの制御

`java.sql.Connection` インタフェースは、データベースの種類に関係なく、共通のメソッドを提供するため、異なるデータベースへの接続を簡単に切り替えることができる。

データベースへの接続を確立するには、通常 **`DriverManager.getConnection()`メソッド**を使用する。
`DriverManager`は、クライアントプログラムに代わって、クラスパス上にあるDBMSベンダーから提供されたドライバ[^2]を検索し、DBMSに接続する。
[^2]:インタフェースを実装したクラスを指す。

##### 例

“`java
import java.sql.

元記事を表示

【JavaGold】FilesクラスのwalkFileTreeメソッド

## 概要
指定されたディレクトリから再帰的に全てのファイルやサブディレクトリを走査する。

シグネチャは以下である。

“`java
Path walkFileTree(Path start,Set,int maxDepth,FileVisitor visitor)throws IOException
“`

– `start`:再帰的な走査を開始するディレクトリの`Path`インスタンスを指定する。

– `options`:走査オプションを含む`Set`である。
主なオプションとして`FileVisitOption.FOLLOW_LINKS`があり、シンボリックリンク[^1]をたどるかを指定できる。
[^1]:ディスク上で扱うファイルなどを本来の位置とは別にファイルを作成し、それを通じてアクセスできるようにする仕組みのこと。Windowsでいうショートカットのイメージ。

– `maxDepth`:再帰の深さの最大値を指定する。
– `0`を指定:
`start`

元記事を表示

java基礎:java文字化けと解決のまとめ

最近、たまに仕事に文字化けの現象が発生しましたので、javaの文字化けを整理してみます。

# コンパイル不備の文字化け
## 例1:
単純なjavaサンプルですが、保存時の文字コードの設定を出力結果への影響を試します。
“`java
public class helloTokyo{
public static void main(String[] args){
System.out.println(“hello tokyo”);
System.out.println(“hello東京”);
}
}
“`
まず、MS932で保存してコンパイルしてテストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/b2f98fc1-ea78-5bcb-dbf8-4d43f347b785.png)
文字化けなし。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476

元記事を表示

Javaのメソッドについて学習してみた

# 概要
Javaのメソッドについて学習してみました。以下のページを参考にしました。

メソッドの利用

https://www.javadrive.jp/start/method/

メソッドの使い方

https://www.javadrive.jp/start/method/index1.html

メソッドの定義

https://www.javadrive.jp/start/method/index2.html

引数を使ってメソッドに値を渡す

https://www.javadrive.jp/start/method/index3.html

引数に配列やクラスオブジェクトを渡す

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

戻り値を使ってメソッドから値を返す

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

戻り値として配列を返す

https://www.javadrive.jp/start/method/index6.html

return文

http

元記事を表示

java勉強メモ1

Javaのプログラムの構造

Javaのプログラムは次のような構造になっています:

大括りにクラスがあって、その中に
フィールド、コンストラクタ、メソッドを配置する。
## Javaのデータ型
Javaのデータ型は大きく2つに分けられます

基本データ型 (プリミティブ型)

整数型:

byte: 8ビット符号付き整数 (-128 から 127 までの範囲)
short: 16ビット符号付き整数 (-32,768 から 32,767 までの範囲)
int: 32ビット符号付き整数 (-2,147,483,648 から 2,147,483,647 までの範囲)
long: 64ビット符号付き整数 (-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの範囲)
小数型:

float: 32ビット単精度浮動小数点数 (約 7桁の有効数字を持つ)
double: 64ビット倍精度浮動小数点数 (約 15桁の有効数字を持つ)
真偽型:

boolean: 真 (true) または 偽 (false) の2つの値を

元記事を表示

ArrayListのcapacityを使いこなしてパフォーマンスを向上させる

## はじめに

Javaでリストを作成するとき、以下のように`new ArrayList<>()`と書いてインスタンスを作成する例をよく目にするかと思います。

“`java
List list = new ArrayList<>();
“`

しかし、以下のように`new ArrayList<>()`の()内に数値を記述してインスタンスを作成することもできます。

“`java
List list = new ArrayList<>(500);
“`

上記例の500にあたる部分が、`initialCapacity`と呼ばれる引数です。この`initialCapacity`を利用することで、リストの操作のパフォーマンスを向上させることができます。
この記事では、`initialCapacity`に関する情報と、その使い方について解説します。

## まとめ

記事が少し長くなってしまったので、先に結論を記載します。詳細については以降で説明していきます。

– **initialCapacityとは**
– ArrayListインスタンスは

元記事を表示

React + SpringBootアプリ 簡易まとめ

# 初めに

今回の記事ではReact、SpringBootを用いた旅行予約管理アプリケーションの作成を行った際に使用したコードを復習も兼ねて簡単にまとめていこうと思います。
今まではEclipseでコード編集を行っていましたが今回のアプリケーション開発ではフロントのコード編集にVC CodeとバックにはIntellijを使用しました。
環境構築などは[YouTube](https://www.youtube.com/watch?v=4LZKnegAm4g&list=LL&index=8&t=3405s)を参考にしました。

## フロント(React)からバック(Java)のAPI呼び出し
SpringBootを使用してアプリケーションを作成する際に使用するControllerに`@CrossOrigin`を使用します。
今回のReactアプリケーションではデフォルトのURL`http://localhost:3000`を使用しているのでControllerには`@CrossOrigin(“http://localhost:3000”)`とすればフロント側から指定のAPIのURLをた

元記事を表示

Javaの文字列の学習をしてみた(後編)

# 概要
Javaの文字列の学習をしてみました。以下のページを参考にしました。

文字列の先頭と末尾から空白文字を取り除く(String.trim,String.strip)

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

文字列に含まれる文字を大文字または小文字に変換する(String.toUpperCase、String.toLowerCase)

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

文字列の最後に別の文字列を連結する(String.concat)

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

文字列の一部を別の文字や文字列に置換する(String.replace)

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

指定した区切り文字で複数の文字列を連結し新しい文字列を作成する(String.join)

https://www.javadriv

元記事を表示

java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverterエラーがでる

# はじめに

ビルドをする際に突然エラーが出てしまったのでまとめていきます

# 問題

以下のエラーが発生するようになりました

“`
Exception in thread “main” java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter, compiling:(server.clj:1:1)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3700)
at clojure.lang.Compiler.compile1(Compiler.java:7609)
at clojure.lang.Compiler.compile1(Compiler.java:7599)
at clojure.lang.Compiler.compile(Compiler.java:7676)
at clojure.lang.RT.compile(RT.java:413)
at clojure.lang.RT.load(RT.java:458)
a

元記事を表示

OTHERカテゴリの最新記事