JAVA関連のことを調べてみた2022年10月02日

JAVA関連のことを調べてみた2022年10月02日

ABC271A~Eの解答[Java]

## はじめに
今回はEまで解けたのでEまで載せます。
なお、Cはコンテスト中のものも載せますがかなり汚いのでコンテスト後に解いたものも載せます。

では見ていきましょう。

## A – 484558
問題文は[こちら](https://atcoder.jp/contests/abc271/tasks/abc271_a)

printfでいけそうとは思ったのですが16進数の時の書式指定ってどう書くんだ・・・?ってなったのでif文で2文字にしました。
“`A.java
class Main{

static Library System = new Library(java.lang.System.in,java.lang.System.out);

public static void main(String[] args)throws IOException{

//Nの受け取り(16進数に変換して大文字に)
String N = Integer.toString(System.in.nextInt(),16).toUpperCase();

//1文字なら

元記事を表示

Jextract を使って、Java から libcurl を使ってみる

Jextract に libcurl を呼び出すサンプルがありました。これを試しに動かしてみました。
(まだ Preview の [Foreign Function & Memory API](https://openjdk.java.net/jeps/424) を使います)

ちなみに、ほかにも以下のライブラリを使うサンプルが置いてあります。
|ディレクトリ|実行するライブラリ|
|—|—|
|cblas|OpenBLAS(行列演算ライブラリ)|
|lapack|LAPACK (数値解析ソフトウェアライブラリ)|
|libclang|Clang の C インタフェースライブラリ|
|libcurl|cURL(データ転送ライブラリ)|
|libffmpeg|FFmpeg(動画・音声の記録・変換・再生ライブラリ)|
|libgit2|Git(バージョン管理)|
|libjimage|ImageJ(画像処理ライブラリ)|
|libproc|/proc インターフェイス|
|lp_solve|lp_solve(混合整数線形計画法のソルバー)|
|opengl|OpenGL(2次元/3

元記事を表示

JFlex のコンパイル後のファイルを読んでみた。

## JFlex とは?
今回は、Lucene というオープンソースの全文検索ライブラリを読もうと思ったら、意味不明な Javaファイルがあって、調べたら JFlex で書かれていたことが判明したのですが、その JFlex のファイルに関する 情報が無かったので記事にしました。どこかで同じように、JFlex の謎ファイルを見つけた人の一助になればと思います。

JFlex とは、パーサーで言うところの lexer を作ってくれるライブラリで、作った lexer で文字列をブロックに分けたりなどのことを自分でカスタマイズできます。
使い方は、flex ファイルという特別なファイルを作って、それを JFlex の jar にかませると、lexer が実装された Java ファイルが出力されるようになっている。
噛み砕いて説明すると、

1:[JFlex の jar をダウンロード](https://www.jflex.de/download.html)
2:flex ファイルを作成する。(今回は[作ってあるもの](https://inst.eecs.berkeley.edu/~cs164/

元記事を表示

Java の Charset のバイトオーダーとBOM

[Java のサポートされているエンコーディングの一覧](https://docs.oracle.com/javase/jp/18/intl/supported-encodings.htm)を見ていると、`UTF-16`, `UTF-16BE`, `UTF-16LE`, `x-UTF-16LE-BOM` とあって、なにが違うんだろうと思って調べてみました。

まとめると、読み・書き時のバイトオーダー (BO) [^bo] と書き込み時の BOM (Byte Order Mark) の違いでした。
* 読み込み時のバイトオーダー
* BE / LE が付かないものは、BOM から自動的に判定
* 書き込み時のバイトオーダー
* BE / LE が付かないものは、BIG バイトオーダー
* BOM の有無
* UTF-8 に「BOM あり」で書き込むものはない[^bom]

[^bo]: バイトオーダー = エンディアン
[^bom]: バイトオーダーに関わらず同じ内容になるので、本来は UTF-8 に BOM (Byte Order Mark) は不要

|名称|

元記事を表示

【Spring Security】WebSecurityConfigurerAdapterからの脱却

# はじめに
Spring bootでログイン機能を実装する方法を解説している記事を探した際、現在では非推奨になっているやり方でログイン機能を実装している記事ばかりが出てきて苦労したので、備忘録として書き残しておきます。

# WebSecurityConfigurerAdapterは現在非推奨に
Spring bootのログイン機能の実装方法を検索すると、多くはこれを継承してうんたらかんたらみたいな記事が出てくると思います。ですが、これは現在非推奨になっています。使っても深刻なエラーになったりはしませんが、非推奨にされたものを使い続けるのは将来のことを考えるとよくありません。

# Configクラスの書き方
ソースコードは以下のようになります。WebSecurityConfigurerAdapterを継承していないことに注目してください。これが現時点での新しい書き方です。URLなどは自身のWebサイトで使うものに応じて置き換えてください。

“`java
package dev.itboot.todo.config;

import org.springframework.bo

元記事を表示

不変なオブジェクトっておいしいの?

javaを勉強している方であれば一度は「不変なオブジェクト(immutableオブジェクト)」という言葉は聞いたことがあると思います。

単語の意味的に、変化しないのね…と容易に想像できますが、学習を進めていくうちに不変なのに変わってる??不変ってどういうこと?と疑問に思ったため、今回は私なりに不変オブジェクトってなんぞやを解説していきたいと思います。

## 目次
+ 不変オブジェクトとは?
+ 単語解説
+ 実際にコードを見てみよう
+ まとめ

# 不変なオブジェクトとは?
不変なオブジェクトとは、「データが変化しないオブジェクト」です!!
わかります…横文字嫌い…オブジェクトってなに?おいしいの?って思いますよね…
オブジェクトとは「物体、対象」と訳されます。
つまり、不変なオブジェクトとは「対象のデータが変化しない」ということになります。

単語の意味を理解できたところで実際にコードを見て学習を進めましょう。

# 単語解説
プログラミング学習をする上で大変なことの一つとして単

元記事を表示

Spring Cloud OpenFeign でサーバ間通信処理のサンプルを作ってみた。

## Spring Cloud OpenFeign とは
Springで簡単に通信処理を実現できるツール

## サンプルのシステム構成図
・サーバ情報
Server①:localhost:8080
Server②:localhost:8090
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951197/a98f44b7-0b39-47e3-c84e-6ef3d1b73085.png)
#### 実行内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951197/9a0966a2-ca32-a47c-6ccc-4373e0e4ca23.png)
「localhost:8080/api/hello」をブラウザーで表示すると「Hello, World」と表示。
Server①がServer②に「Hello,」という文字を渡して、Server②の処理内で「Hello, World」に加工。

元記事を表示

OpenJDK コミッターになれました

2022年9月20日付で OpenJDK のコミッターになることができました。
協力してくださった方々に感謝申し上げます。

これからコミッターを目指す方のために、私の例を記載します。

# OpenJDK での役割
OpenJDK では、Contributor, Author, Committer, Reviewer の役割があります。後者の方が権限が高いです。

Contributor 修正を提案するためには Oracle Contributor Agreement を承諾する必要があります。個人として、または会社として承諾が必要になります。個々のケースによって状況が異なるため、詳細は公式ページを確認してください。https://openjdk.org/guide/
Author 2件以上修正が採用された後プロジェクトリーダーにメールで依頼すると Authorとして登録されます。Author になると JDK Bug System のユーザーがもらえるので、自分で問題を登録す

JavaでPDFに1行または多行テキスト透かしを追加する方法

PDFの透かしは、その内容の下または前にテキストまたは画像を配置することによって、所有者を識別する、機密性を示す、またはPDFファイルの状態を示す手段として機能します。この記事では、無料の[Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して、Javaで**PDFに1行または複数行のテキスト透かしを追加する方法**、および透かしの位置、不透明度、サイズ、および角度を設定する方法を紹介します。

– **[PDFに1行のテキスト透かしを追加する](#pdfに1行のテキスト透かしを追加する)**
– **[PDFに複数行のテキスト電子透かしを追加する](#pdfに複数行のテキスト電子透かしを追加する)**

## 【依存関係の追加】

> **この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。**

### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml フ

ByteBuffer#getInt()でBufferUnderflowExceptionが出るときの対処法

# 2byteの16進数を整数にしたい

Jpegのメタデータのセグメント長を取得したかったのですが、思いもしなかったところでハマりました。

“`java
byte[] bytes = new byte[]{(byte)0x03,(byte)0x1e} // これから798を求めたい
ByteBuffer.wrap(bytes).getInt(); //BufferUnderflowExceptionが発生
“`

## javaのIntは32bitの符号付き整数
つまり`byte[4]`です。

上のコードでは`byte[2]`です。ByteBuffer#getInt()は4byte取得しよとします。僕はここで自動で0x00で埋めてくれると勝手に思ってました。

## getShort()を使う
`ByteBuffer#getShort()`はshort型なので2byteです。これで動きます。

## 4byteになるまで埋める
~~これが最適解かはわかりませんがとりあえず動きます。~~
3byteのときはこの方法が良いと思います。

“`java
byte[] tmp =

Open Libertyを試してみる

# What’s?

Java EE/Jakarta EEのアプリケーションサーバーである、Open Libertyをちょっと試してみたいということで。

Open LibertyのGetting startedの流れをなぞりつつ、簡単なJAX-RSとCDIを使ったアプリケーションを動かすところまでやってみようと思います。

そもそもOpen Libertyとは?というところも見ていきたいなと。

# WebSphere

まずは、WebSphereから。

以下のページを見ると、「WebSphere Traditionalランタイム」と「WebSphere Libertyランタイム」の2種類があるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309669/6a54e354-e1d0-7ae3-f19f-e3a2a0dc45bc.png)

https://www.ibm.com/jp-ja/cloud/websphere-application-server

WAS N

Python,Ruby,PHP,Java,JavaScript,PerlのPDF作成の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,PerlのPDF作成の比較

# Python

https://qiita.com/godan09/items/13866970972bf3a1c243

# Ruby

https://qiita.com/inoue9951/items/4498e5d130702d884352

# PHP

https://qiita.com/one_punch_man/items/bf140d4300195577dd3d

# Java

https://qiita.com/iceblue/items/a059c99ef1c17226a02a

# JavaScript

https://qiita.com/shuhei_sakiyama/items/ef68d49b7199d50a853b

# Perl

https://perlzemi.c

eclipse警告”assignment to variable xxx has no effect”についての覚書き

ええと、入門者向けテストにありがちなクイズだと思いますが、以下のJavaコードがあった時、aが増えないステートメントはA~Fのどれでしょうか。
“`java
public class IncTest {
static int a;
static int b;
public static void main(String[] args) {
a++; //A
a=a++; //B
a=(a+=1); //C
a=a+1; //D
a=++a; //E
b=a++; //F
System.out.println(a);
System.out.println(b);
}
}
“`
正解はBですね。Javaの仕様では、上記のうちBの文a=a++;のみ、aのインクリメントが意味を持ちません。後置インクリメントa++は代入操作の後に行われることになっていますが、代入先もaなので、インクリメント前の値でアサインが完了してしまい、文の判定としてはインクリメント前のaに戻される(もともとのaが残る)ことになります。上記の実行結

【Java】IntelliJ IDEAで環境変数を設定する方法

# はじめに
今回は、環境変数の設定について調べたことをまとめます。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的
以下内容のアウトプット

– IntelliJ IDEAで環境変数を設定する方法
– application.propertiesでシステム環境変数を扱う方法

# 開発環境
– Java 17.0.4.1
– Spring Boot 2.7.4
– IntelliJ IDEA

# この記事の内容
1. 前提
2. 環境変数を設定する
3. application.propertiesの記述を変更する

# 1. 前提
リモートリポジトリにプッシュするため、`application.properties`の以下内容を環境変数に置き換えたい。

“`application.properties
# 現状
spring.datasource.url = データベースのURL
spring.datasource.username = ユーザー名
spring.datasourc

Excelでコメントを挿入、編集、削除する方法(Java)

Excelのコメントは、任意のセルに挿入できるメモです。例えば、数式の説明、提案、他の人のためのメモなど、さまざまな目的に使用することができます。コメントを挿入すると、ユーザーは必要に応じてそれを編集したり削除したりすることができます。この記事では、無料の[Free Spire.XLS for Java API](https://jp.e-iceblue.com/introduce/free-spire-excel-for-java.html)を使用して、Javaで**Excelにコメントを挿入、編集、削除する方法**を説明します。
– **[Excelにコメントを挿入する](#excelにコメントを挿入する)**
– **[Excelでのコメントを編集する](#excelでのコメントを編集する)**
– **[Excelからコメントを削除する](#excelからコメントを削除する)**

## 【依存関係の追加】

> **この方法は、無料のFree Spire.XLS for Javaが必要ですので、先にjarファイルをインポートしてください。**

### 1. Maven

M

PDFのレイヤーの追加・非表示・削除(Java)

PDFレイヤーは、PDFドキュメントのためのインタラクティブな機能です。レイヤーは、テキスト、画像、その他の要素を追加することができる独立した重ね合わせページと見なすことができます。レイヤーは名前を持つことができ、ユーザーはこのレイヤーが見えるか見えないかを変更することができます。この記事では、無料のFree Spire.PDF for Javaを使用して、**PDFドキュメントにレイヤーを追加、非表示、削除する方法**を説明します。

– **[PDFにレイヤーを追加する](#pdfにレイヤーを追加する)**
– **[PDFのレイヤーの可視性を設定する](#pdfのレイヤーの可視性を設定する)**
– **[PDFからレイヤーを削除する](#pdfからレイヤーを削除する)**

## 【依存関係の追加】

> **この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。**

### 1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にア

PHPerが”プロになるJava”を読んでJavaに入門する【データ構造編】

# はじめに
普段PHPを業務で使っているエンジニアがJavaを勉強するために
[プロになるJava](https://gihyo.jp/book/2022/978-4-297-12685-8)を読んで、その中でもデータ構造や型の部分で個人的にPHPと違うなと思った個所や特に覚えておいた方がいいなと思った個所をまとめました。

# 4.2.2 基本型と参照型
> String型だけ大文字で始まっていて、他の型は小文字で始まっています。
> int型やdouble型など小文字で始まっている型を**基本型** (または**プリミティブ型**)といいます。
> 全部で8つありますが、ここに挙げた4つは必ず押さえておきましょう。
> では基本型ではないString型は何になるかというと、**クラス**というものになります。
> クラスはJavaで機能をまとめるための基本的な仕組みです。クラス以外にも基本型ではない型はありますが、そういった基本型ではない型を**参照型**といいます。
> クラスであるString型の値には、toUpperCaseメソッドなどのメソッドを呼び出すことが出来ました。

Java で Unicode の Fullwidth や Halfwidth を判定する方法

ICU4J ライブラリーを使って Unicode の East Asian Width プロパティーを取得することで、Unicode としての全角・半角を判定することができます。

“`java
import com.ibm.icu.lang.CharacterProperties;
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.lang.UProperty;
import com.ibm.icu.util.CodePointMap;

public class EastAsianWidthChecker {
private static final CodePointMap eastAsianWidthMap =
CharacterProperties.getIntPropertyMap(UProperty.EAST_ASIAN_WIDTH);

/**
* @return {@link UCharacter.EastAsianWidth#NARROW NARROW},

Java で全角・半角・どちらでもないを判定する方法

Windows-31J でエンコードしたときのバイト数を基準として全角・半角を判定する方法を紹介します。エンコードできない場合は半角でも全角でもないものとします。

## 実装

以下のメソッドは、入力が半角文字だと1、全角文字だと2を返し、どちらでもない場合には例外 CharacterCodingException を投げます。

“`java
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

public class Windows31JWidthChecker {
private static final CharsetEncoder encoder = Charset.forName(“windows-31j”).newEncoder();

/**

Wordドキュメントにワードアートを挿入するまたは読む方法(Java)

ワードアートは、テキストに塗りつぶし、輪郭、影などのデザイン要素を追加することができる一連のテキストスタイルです。ワードアートを挿入することで、テキストを目立たせることができます。Microsoft Wordでドキュメントを作成する際、ワードアートの挿入が必要になることがあります。この記事では、Free Spire.Doc for Javaを使用して、JavaでWordドキュメントにワードアートを挿入または読み込む方法について説明します。

– **[JavaでWordドキュメントにワードアートを挿入する](#javaでwordドキュメントにワードアートを挿入する)**
– **[JavaでWordドキュメント内のワードアートを読み込む](#javaでwordドキュメント内のワードアートを読み込む)**

### 【依存関係の追加】
> この方法は、無料のFree Spire.Doc for Javaが必要ですので、先にjarファイルをインポートしてください。
#### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加するこ