JAVA関連のことを調べてみた2021年08月05日

JAVA関連のことを調べてみた2021年08月05日

While(flag) 無限ループを使う時の注意

### はじめに
これは、私が無限ループを使うときに失敗して今後、注意しようと思うことである。
初心者の方で同じ落とし穴に落ちた人の役に立てば何よりである。
そして、これは自分の備忘録でもある。

### はじめに
ここで問題になるのは、arraySort()メソッドにおけるwhileの無限ループである。
Whileの無限ループは仕事が終わったらflag=false;にしてループを止めるのであるが、このflag=false;の位置について論じたい。

これを私ははじめ、18行目に入れていた。
そしたら、結果は
{31,29,45,77,84,96}となり並び替えが完了していない。
そこで、並び替えの様子を書き出してみた。
![スクリーンショット 2021-08-05 8.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1762776/375f20bd-0ac3-bd7e-147a-817bdfecf433.png)

これをみると、ループは調度2回、回ったところで止まっている。
2巡目の最後は

元記事を表示

電話番号チェックに NumberUtils#isNumber() を使ってはいけない

> Non-hexadecimal strings beginning with a leading zero are treated as octal values. Thus the string 09 will return false, since 9 is not a valid octal value. However, numbers beginning with 0. are treated as decimal.
> https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html

頭にゼロが付いていて16進数でない文字列は8進数として扱われます。
よって9は有効な8進数ではないため、文字列 “09” はfalseを返します。
ただし、(頭ゼロの次が)0で始まる文字列の場合は10進数として扱います。

つまり、電話番号の数値チェックで `NumberUtils#isNumber()` を使うと “090” や “080” が数値で

元記事を表示

CodeSignal – rotateImageにチャレンジ

コーディングしなさすぎてコーディングを忘れたエンジニアがコーディングを思い出すためにコーティングします。
今回は、アメリカのコーデイング練習サイトCodeSignalの問題「rotateImage」を解いていきます。
サイトによると、この問題はAmazon、Microsoft、Appleの面接で出されたことがあるようです。

##問題
画像を表したn×nの2Dの行列が配列として与えられるので、それを時計回りに90度回転して出力する関数を書きます。
たとえば以下であれば、

“`Java
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
“`

出力はこうなります。

“`Java
rotateImage(a) =
[[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]
“`

制約:
1 ≤ a.length ≤ 100
⇨配列の長さは1以上100以下
a[i].length = a.length
⇨画像の縦横の要素数は同じ
1 ≤ a[i][j] ≤ 10^4
⇨配列の中の値は1以上1000

元記事を表示

Java超基本文法

##はじめに
就職活動を行なっている中で、企業様からJavaの基礎を使って解く問題が課題で出されまして、触ったことはありませんが、Javaの基礎学習を始めます。

よろしくお願いします。

##文字の出力
System.out.print()で、()の中身を出力できます。
文字列を出力させる場合はダブルクオーテーションが必要です。

ちなみに「println」ですが、「l」はエルです。
私は「i」だと思いました。
ちなみにセミコロンは必須で文末に必要です。

“`java
System.out.println(“Hello World”);
// => Hello World
“`

文字列同士の足し算(結合)ができます。計算するときと同じように「+」を使って結合します。

“`java
System.out.println(“Hello” + “新しい私”);
System.out.println(“3” + “5”);

// => Hello新しい私
// => 35
“`

##数値の出力
数値の場合は、ダブルクオーテーションが必要ありません。
()内で「+」や「-

元記事を表示

Javaで文字列が数値かどうかを判定する

なんでこんな初歩的なことを書くかというと、7月18日(日)に行われたJava™プログラミング能力認定試験 1級(サーティファイ)で出題されたのです。

ド忘れしちゃって苦し紛れに書いたのがこれ。

“`java:
boolean isNum = true; // 数値だよ
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
isNum = false; // 数値じゃないよ
}
“`

満点だったので合ってはいたようです。
ただ、これだと[全角数字もチェックOKになってしまう点](https://qiita.com/cress_cc/items/a72c25b39f5baaaac4d6)は要注意です。
知識や技能というよりは「妥協する力」を問われる試験だった。

実務では正規表現を使うのが正解なんだろうなあ。。

元記事を表示

Java PDFファイルのプロパティを設定

今日から、Javaについての話にします。PDF のプロパティは、文書のタイトル、使用しているフォント、セキュリティ設定などのファイル情報を含んでいます。従って、今回はSpire.Doc for Javaというライブラリを使ってPDFファイルのプロパティ、及びカスタムプロパティを設定する方法を紹介させていただきます。

下準備

1.E-iceblueの公式サイトからSpire.PDF for Javaをダウンロードしてください。

f:id:lendoris:20210804142827p:p</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>PDF</div>
<div class='tag-cloud-link'>設定</div>
<div class='tag-cloud-link'>プロパティ</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/iceblue/items/cedce3a33af3a4310bd9'>元記事を表示</a></div>
<h3 id=SQL Server JDBCでTLSエラーが出る時の対処法

SQL Serverのサーバー側がTLS1を使用していると、セキュリティの制限でエラーとなることがある。

環境
Debian 10
OpenJDK 8 JRE Headless
Python 3.9
SQL Server JDBC 9.2.1.0 Jpn

# エラー
“`
com.microsoft.sqlserver.jdbc.SQLServerException: com.microsoft.sqlserver.jdbc.SQLServerException: ドライバーが SSL (Secure Sockets Layer) 暗号化による SQL Server への安全な接続を確立できませんでした。エラー: “The server selected protocol version TLS10 is not accepted by client preferences [TLS12]”。
“`

# Javaの場所を探す
“`
$ /usr/sbin/update-java-alternatives -l
java-1.8.0-openjdk-amd64 1061 /u

jarファイルをjdbcドライバも含めて作成する

## 概要
jdbcドライバも含めたjarファイルを作成する方法。
ここでは、Sample.javaというファイルと、sample-jdbc-1.0.0.jarとsample002-jdbc-1.0.0.jarというjdbcドライバを使う例を書く。

## Classファイル生成
まずはclassファイルを作成する。
ドライバは`:`でつなぐ。windowsの場合は`;`でつなぐらしい。(未確認)

“`
$ javac -classpath “./sample-jdbc-1.0.0.jar:./sample002-jdbc-1.0.0.jar” Sample.java
“`

実行

“`
$ java -cp “.:./sample-jdbc-1.0.0.jar:./sample002-jdbc-1.0.0.jar” Sample
“`

## jarファイル作成
以下コマンドでjarファイルを作成する。

“`
$ jar cvf Sample.jar *.class
“`

jarの中身を見てみるとこんな感じ。このまま実行するとエラーになるので、MANIFEST.M

Java入門[Javaとは〜型と変数、定数]

Javaの基本的な学習を終えたので、思考整理のための投稿になります
もしも間違っている部分などがあれば、ご指摘などを頂けると幸いです。

## Javaとは

1995年に登場したプログラミング言語であり、世界的に有名。

RedMonkが2021年3月に公開した言語ランキングでは以下のような順位

1.JavaScript
2.Python
3.Java
4.PHP
5.C#

The RedMonk Programming Language Rankings: January 2021

## Javaで開発されたもの

https://evernote.com/intl/jp

https://www.minecraft.net/ja-jp/store/minecraft-java-edition

## Javaの開発

`コード作成 → コンパイル → 実行`になる。

#### コンパイルとは

プログラム言語をコンピュータが理解できる言語に変換すること。
JavaはWindowsでもMacでも環境に左右されずに動作する。

**WindowsOSにだけわ

【VBscript、Java】Tumblrのエクスポートファイルからホームページを生成する。

こんばんは。

写真共有サービスのTumblrをご存じですか?写真に特化したSNSで、世界中の写真好きの投稿を見る事ができます。ユーザー数はtwitterやfacebookには及びませんが、SNSのデメリットの誹謗中傷なども(自分が知る限りは)殆ど目に触れる事はなく、とっても快適なサービスです。自分は2014年頃から愛用しており、ほぼ毎週投稿しているので、300件くらいの投稿があります。

今回は、Tumblrに投稿した記事を、ホームページ風にアレンジするプログラムを作りましたのでご紹介します。

事情により、VbscriptとJavaの合わせ技という事もあり、またTumblrのアーカイブも(Tumblr社には申し訳ないですが)非常に使い辛く苦慮しました。
空き時間にちょこちょこプログラムを作り、テストでもバグが大量に出まして、結果6か月かかりました(途中でモチベーションが下がりサボった期間含む・・)。

全体像はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402

Javaにおけるアノテーションの復習メモ

## アノテーションとは
– ソースコードの注釈
– コンパイラやJVMに付加情報を伝える
– 目印のようなもの

## 主なアノテーション
– @Override→スーパークラスのメソッドをオーバーライド

– @FunctionalInterface→関数型インターフェイス

→単一の抽象メソッドを持つインターフェイス(1つだけ持てる)
→staticメソッド、デフォルトメソッドは複数可
→Objectクラスのpublicメソッドである抽象メソッドは含まない(複数定義可)

“`java
package cp2.no3;

@FunctionalInterface
public interface FunctionalInter {

// 単一の抽象メソッド(抽象メソッドは1つしか定義できない。2個以上は不可)
void foo(T t);

// Objectクラスのpublicメソッド
String toString();

// Objectクラスのpublicメソッド
boolean equals(Object object);

// static

[JAVA][SpringBoot]HttpClientが通信の際に利用しているTLSのバージョンを確認する

## やりたいこと
* SpringBoot(2.3.3.RELEASE)で作成されたWebアプリが、ある外部APIに接続する際に、HttpClientがセキュリティ通信方式としてTLSのバージョンのいくつを利用しているのかを調べる

## 解決できた方法
* 出力するログレベルをDEBUGにした上で実際に通信させたところ、SSLConnectionSocketFactory がログに情報を出力した

## 解説
### HttpClientのバージョン
* 4.5.3
* build.gradle に記述があった
`implementation ‘org.apache.httpcomponents:httpclient:4.5.3’`
* gradleでの記述を検索する際、「HttpClient」「httpClient」みたいに大文字を入れて検索してる間は見つからなかったので全部小文字で検索すべきだった

### 直面した困難
* 検索したところ、HttpClientが利用するTLSのバージョンの設定方法はヒットするが現在実際にどれを使っているのかの調べ方はヒットしなかった

Thymeleaf

#基本は変数式とOGNL
Thymeleafの基本は、「値を出力する(表示する)」ということです。これは、${{○○}}という形で記述されます。この${0}という書き方は「変数式」と呼ばれます。変数式の中に記述されるのは、「OGNL」(Object-Graph Navigation Language)式という、Javaの値にアクセスするための式言語です。Thymeleafに限らず、各種のライブラリやフレームワークなどで使われています。

OGNLは、Javaの簡易版のような書き方をするので、Javaプログラマであればそれほど難しくはありません。基本的に「Javaで式を書けば、シンプルなものならたいていはOGNLの式になる」と考えてしまっていいでしょう。既に基本的なOGNLは使っていますが、もう少し違ったサンプルを挙げてみましょう。

“`
タグの部分をこのように書き換えてみてください。
リスト4-1

Helo page

JavaGold学習メモ(第一章)

## 主旨
– JavaGold資格取得に向けて学習したことの内容メモ(黒本をまずは読んでみる)
– 記憶の怪しい項目や知らなかったことをまとめる
– あとで見返せる程度で備忘録を残す(多分意味が自分しか理解できない記載も多い)
– 完全なメモなので誤字などもあるかもしれないが細かいことはひとまず気にしないでおく

## Javaのクラス設計について
■カプセル化
・外部に公開するアクセス手段のメソッド→アクセサメソッド o r アクセサ
・finalやstaticを実装することとカプセル化は無関係
・トップレベルクラス→ネストされたクラスでない通常のクラス→ファイル名がFoo.javaでクラスがFooの場合、トップレベルクラス
・一つのソースにおいて、宣言できるpublicなトップレベルクラスは一つだけ

■継承
・is-a関係(AはBである) or kind -of-a関係(AはBの一種である)
・has-a関係(AはBを持っている)は、集約の関係。構成集約とも呼ばれる。
・集約は関係するオブジェクトのライフライクルが同じではない→親クラスと学生クラス。親クラスを削除しても子クラス

JSFを環境構築してみた!

仕事でJSFを使うので、独学でも触りたいと思い、環境構築しました。

##開発環境
Windows10 home
Java SE8
netbeans 8
GlassFish 4.1.1

#Javaのインストール
[こちらのサイト](https://www.oracle.com/java/technologies/javase-downloads.html)から、**Java SE 8**をインストールします。
最新版のJDKだと、netbeansをインストールする際にエラーが排出されてしまう為、**SE 8**をインストールしましょう。

#環境変数の設定
次に、「コントロールパネル」→「システムとセキュリティ」→「システム」の「システムの詳細設定」から環境変数の設定を行います。
「システム環境変数」の中に「Path」という変数があるので、編集ウィンドウから新規ボタンを押してJDKをインストールした場所のbinディレクトリのパスを追加します。
「Path」に追加後、コマンドプロンプトを立ち上げ、“javac“とコマンドを打って、きちんと環境変数が設定できているか、確認します。

【Jackson】JSONから特定プロパティだけデシリアライズする

## やりたいこと
以下のような`JSON`から、`value`プロパティだけを、型を付けてデシリアライズします。

“`javascript
{
“value”: “10”, // このプロパティは有ったりなかったりする

/* 他にも沢山のフィールド */

}
“`

## やり方
以下のような読み出し関数を作ることでできます。
サンプルコードは`Kotlin`ですが、`Java`でも問題なく動くと思います。

“`kotlin
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

val mapper: ObjectMapper = jacksonObjectMapper()

/**
* @param json 読み出し対象JSON
* @param targetPropertyNam

TomcatとJerseyでトランザクション管理してみる

# はじめに

Tomcat + Jersey という構成の Web アプリケーションの動作を理解するために、[Tomcat Embed](https://mvnrepository.com/artifact/org.apache.tomcat.embed) を使って実験をしていきます。
いまどきこんな構成で開発を始めることは少ないかと思いますが、レガシーソフトウェアと戦う人たちの助けになれば幸いです。

## 関連記事の一覧(予定)

– [埋め込みTomcatでJerseyを動かしてみる](https://qiita.com/atti/items/fa3843f75c4bd669059a)
– [HK2でDIしてみる](https://qiita.com/atti/items/3f6f43c5168323344427)
– [BeanValidationで入力値検証してみる](https://qiita.com/atti/items/2267a4b52b033dfabcca)
– TomcatとJerseyでトランザクション管理してみる ← イマココ

## リポジトリ

http

デザインパターン勉強会⑦Builder

はじめに

ZOOM勉強会の議事録です。
第7回はBuilderパターンです。

Builderパターン

オブジェクトの生成における呼び出すメソッドの順序と具体的な生成メソッドの分離をします。
分離することにより、オブジェクト生成の順序を使い回すことができます。
特に、コンストラクタの引数が多いときに有効です。

ビルダーパターンの役割は以下です。

  • Builder
  • 一つのBuilderに依存しないようにするインタフェース、建築材料を持っている

  • ConcreteBuilder
  • インスタンス生成時に使用するメソッドの具体的な実装

  • Director
  • 設計図のようにインスタンス生成時の順序を知っている、材料を組み上げる役割

  • Client
  • ビルダーパターンを利用してオブジェクトを生成するコード

今回はRefactoring.GuruのJ

CodeSignal – firstNotRepeatingCharacterにチャレンジ

コーディングしなさすぎてコーディングを忘れたエンジニアがコーディングを思い出すためにコーティングします。
今回は、アメリカのコーデイング練習サイトCodeSignalの問題「firstNotRepeatingCharacter」を解いていきます。
サイトによると、この問題はAmazonの面接で出されたことがあるようです。

##問題
“abacabaed”のような文字列sが渡されるので、最初に出てくる重複していない文字を探します。
上の例だと、重複していないし最初に出てくるのでcが答えです。

もし重複している文字がない場合は、’_’を返します。

##考え方・解説
最初は単純に、文字を一つずつループして、もう一つループを回して他の文字と比較し、重複がない文字を探す方法が浮かびました。
しかしこの方法で回答すると、実行時間超過でテストが一部通りませんでした。

そこで、この解き方の無駄を探すと、それぞれのループで全ての文字をチェックしていたので、重複した文字を何度も比較してしまっていることに気づきました。
たとえば、文字列の中にaが1000回あれば、2回目のaでその文字は重複しているた

【Java】新卒が初めてのコードレビューで受けた指摘5選

## はじめに

新卒でSIerのJavaプログラマとして働き始めて2ヶ月が経ちました。
忙しい中、自分の拙いコードを見てくださる先輩方には感謝しかありません。

今後同じ指摘を受けないように、コードレビューでの指摘をまとめようと思います。

## ①Nullぽを起こさないようにチェックを入れる。

“`Java
Customer customer = getCustomer(request);
System.out.println(“ようこそ、” + customer.getName() + “さん”);
“`

もしgetCustomerで顧客情報が取得できなかった場合、customerはnullとなり、getNameメソッドを呼び出す時点でヌルポが発生します。

Nullチェックするときは、CollectionUtils.isEmptyとか、StringUtils.isEmptyとかを使いましょう。

https://qiita.com/mtanabe/items/fdfd304e461fd50e10ff

https://qiita.com/mtanab