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

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

Java 正規表現メモ

# [] ← これは範囲指定の時に使うぞ!
“`java
Pattern pattern = Pattern.compile(“^Hello, ([.]+)$”);
String in = “Hello, Qiita!”;
Matcher matcher = pattern.matcher(in);
if (!matcher.matches()) return;
System.out.println(matcher.group(1));
“`
`Hello, ` の後はアルファベットだけにしたいから `[\\w]+` で……
やっぱり数字も含めたいから `[\\w\\d]+` で…..
あー、でも記号とかも入れられるようにしたいなぁ…
それなら `.` を代わりに使えば!
`[\\w\\d\\-\\+_\\./\\^\\$]+` -> `[.]+`

これで `Qiita!` が表示され……ません!
不正な正規表現パターンだよ!的なことを言われます。
なぜでしょうか。

理由は簡単で、 `[]` が複数の条件を持つパターンでのみ使用可能であるからです。
`.

元記事を表示

【Java】エラーの種類

# はじめに
Javaには大きく3つに分類できるエラーがあります
# 文法エラー
### 原因
* 文法の誤りによりコンパイルに失敗します
`;`の付け忘れ、変数名の違い、privateメソッドを外部から呼び出すなどが代表的な誤りです
### 気づくポイント
* コンパイルするとエラーが発生し失敗する
### 解決策
* コンパイラが指摘したコードの箇所を修正する
# 実行時エラー
### 原因
* 実行している最中い何らかの異常が発生し、動作が継続できなくなりエラーになります
* 文法に誤りがないためコンパイルは成功し、実行もできますが、実行中にエラーメッセージが表示されて強制終了します
### 気づくポイント
* 実行すると途中で強制終了する
### 解決策
* あらかじめ「`エラーが発生したときの対応策`」を書き、事態を回避する
# 論理エラー
### 原因
* 文法に問題はなく、強制終了もしません
* プログラムの実行結果が想定していた内容と違いエラーになります
### 気づくポイント
実行すると想定外の処理結果になる
### 解決策
原因箇所を自力で探してコードの箇所を修正す

元記事を表示

【Spring Data JDBC】QueryアノテーションのSELECT文からnullが返ってくる

# はじめに
Springの勉強を始めてSpring Data JDBCの@Queryの操作が上手くいかず、
数時間を溶かしたので備忘録として残します。
[参考リンク](https://qiita.com/dkurata38/items/33e43b6cfc6f2f2bb393)

# 問題
エラーを吐くわけではないのに、SELECT文がnullで返ってくる。

“`java:Users.java(Domain Object)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Users {
/** 識別ID */
@Id
private Integer id;
/** ユーザ名 */
private String name;
/** パスワード */
private String password;
/** 作成日時 */
private Timestamp created_at;
/** 更新日時 */
private Timestamp updated_at;
}
“`

“`java:

元記事を表示

JAVA応用③

# 本日の課題

問題: 商品名を入力し値段が出るシステムをHashMap用いて制作せよ

## 回答
~~~~~java
package osakana;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class fish {
public static void main(String[] args)throws Exception {
System.out.println(“商品を入力してください”);
Scanner s=new Scanner(System.in);
String Fish=s.next();

Map map = new HashMap();

map.put(“サバ”,250);
map.put(“マグロ”,400);
map.put(“ブリ”,350);
map.put(

元記事を表示

Spring BootのWebアプリケーションの基本④

前回の記事では、3層アーキテクチャについての説明とプレゼンテーション層とビジネスロジック層を分離させる処理について説明をしてきました。

今回はデータ・アクセス層についての説明をしていきたいと思います。

データ・アクセス層は、データの検索や操作をしたり、データの永続化を管理したりする役割を担っている部分で、データを永続化するためのRepository層についての処理を記述していきたいと思います。

そして、データの検索や操作をしたり、データの永続化をするためには、データベースの知識が必要不可欠なので、データベースについても触れていきます。

今回のファイル構成は、以下になります。

クリックして展開

.
├── .gradle
├── .idea
├── build
├── gradle
└── src
     ├── main
     |      ├── java
     |      |      └── com
     |      |           └── example
  
元記事を表示

java 配列重複値を唯一にする

``` package ATest; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Test4 { static ArrayList oAlArray = new ArrayList(); static ArrayList oAlArray2 = new ArrayList(); // // oAlArray.add("1"); private static boolean checkForDuplicates(T... array) { //空のセットを作成します Set set = new HashSet(); //すべてのアレイ要素に対して実行 for (T e: array) { //重複が見つかった場合はtrueを返します if (set.contains
元記事を表示

Javaで「ファイルかディレクトリかを判定する(Files.isDirectory)」の動作を確認してみた

# 概要 Javaで「ファイルかディレクトリかを判定する(Files.isDirectory)」の動作を確認してみました。以下のページを参考にしました。 https://www.javadrive.jp/start/file/index2.html # 実装 以下のファイルを作成しました。 ```JSample2_1.java import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Files; class JSample2_1{ public static void main(String[] args){ Path p1 = Paths.get("doc/report"); Path p2 = Paths.get("doc/manual"); Path p3 = Paths.get("doc/memo"); checkDirectory(p1); checkDirectory(p2); checkDirectory(p3);
元記事を表示

JaCoCoでカバレッジはどこまで確認できるか?

## この記事の目的 JaCoCoでカバレッジがどこまで確認できるか?について機会があったので調べました。 すぐ忘れてしまいそうなので個人的なメモとして記します。 ## 結論 JaCoCoは条件網羅を見るには十分実用的であるが、複合条件網羅までは見れない。 ## JaCoCoのCoverage定義 https://www.jacoco.org/jacoco/trunk/doc/counters.html を見ると、明確にサポートしているのは、 C0:命令網羅 (statement coverage, instructions coverage) C1:分岐網羅 (branch coverage) であると読み取れます。 ## そもそもC0~C2の定義は? 経験則としてC2については各プロジェクトや現場で微妙に解釈が揺れているケースが多いと思います。 ここでは、 [ホワイトボックステストにおけるカバレッジ(C0/C1/C2/MCC)について](https://qiita.com/odekekepeanuts/items/8b6542467d2a0066e5af) に沿って
元記事を表示

【Java•学習ログ⑤】メソッド呼び出しと引数

教本に沿ってやってみたシリーズ、『第5章』です。 ≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ ## ■メソッドとは 数千〜数万行にも及ぶプログラムを複数の部品に仕分けるしくみ。この一つの単位のことを**メソッド**という。 メソッドは繰り返し使用することができるので、同じ処理を何度も書く必要がなくなる。 なお、メソッドを作成することを**定義**といい、再利用することを**呼び出す**という。 ![スクリーンショット 2023-08-10 235917.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/3ced047a-6643-37e6-b4af-cb426c337a02.png) 【実行】 ![スクリーンショット 2023-08-11 000821.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/56acf901-8c0b-1330-fc41-aa8
元記事を表示

Java Spring Bootで作ったアプリをRenderで公開する

仕事の関係で今更ながらJavaの勉強しています。Spring Bootはとっつきやすいフレームワークなので参考書読みながらHello Worldから始めてるのですが、アプリの公開(Deploy)に関してはどうしたもんかと。 Railsは得意分野なのでRender(最近Herokuが有料化に伴い、こっち使う人が増えた)という選択肢が思い浮かんだのだけど情報が少ないようですね。2023年時点でお金かけずBootのアプリを公開する方法について書いたら価値あるかと思ってやってみました。Stackoverflowで聞きまくって、マイナス評価もらいながらも頑張って調べたので、この情報を還元します。 # TL;DR Render.comにWebアプリケーションを作成して、GithubにBootのアプリをコミットしたものを用意して連動させる。 以下の **Dockerfile** をアプリケーションルート配下に配置する。 ```Dockerfile:Dockerfile FROM maven:3-eclipse-temurin-17 AS build COPY . . RUN mvn clean p
元記事を表示

Herokuに初めてのデプロイ体験。難しかった。

# はじめに こんにちは。takunと申します。 この記事では初めてWebアプリをデプロイするときにぶつかったエラーとその解決策について、備忘録を箇条書きで挙げて行きます。 投稿者は初心者エンジニアです。間違ったことや不適切な内容となってしまう可能性もあることをご承知ください。また、助言など頂けると嬉しいです。 前提として以下の通り。設計の詳細は、前回記事をご参考にいただけたら幸いです。 使用PC:MacbookAir(Intel) 開発環境:Eclipse 使用言語:Java 使用DB:MySQL5.7 大まかな構成:JSP,サーブレットクラス,DAOクラス https://qiita.com/takun/items/9ba715007c797e7ed21c # 目次 ① Herokuとは。選んだ理由。 ② Heroku CLIがインストールできない ③ 作成したDBへのクエリがロストした。 ④ ビルドができない。ビルドって奥が深い。(Java11→8に変更) ⑤ コンテキストルートの設定 # ① Herokuとは。選んだ理由。 HerokuはPaasの1つです。
元記事を表示

文字列はなぜ.equalsで比較するのか。参照型の変数について分かりやすく説明してみる。

### さっそくいってみよう 結論だけ知りたい方は[変数AとBを比較してみましょう](#変数aとbを比較してみましょう)にとんでください まず初めに、参照型の代表であるStringの変数を宣言してみましょう。 ``` String A = "あいうえお"; ``` この時何が起きているかというと、 Aロッカーに "あいうえお" という文字列が格納された。と考えてください。 (文字列だとわかりにくい場合は、サッカーボールでもカバンでもなんでも構いません。 わかりやすいものでイメージしてみてください。) そしてそのAロッカーを開けるための鍵が、変数Aになります。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511376/02920c11-f7cc-d99f-ece9-49bc346afbb9.png) この図を見てわかる通り、変数Aに直接 "あいうえお" が入っているわけではありません。 変数Aにはロッカー番号が入っているため、参照型と呼ばれるわけですね。 それではここで、もう一つ変
元記事を表示

Spring BootとMySQLでメモアプリを開発しました #3【駆け出し】

# Spring Bootでの開発 Spring Bootで作成した簡易メモアプリにスタイルを当てていなかったため、 CSSを少し学んだ後、アウトプットのためにアプリケーションにスタイルを追加していく過程です。 【 前回の記事 】 https://qiita.com/Takatsuna/items/7be62afa19cb2cd92b88 ## 作ったもの #### 簡易メモアプリ リポジトリ: https://github.com/takatsuna113/spring-memo-app [ 前回 ] Home画面と詳細画面のみ [ 今回 ] 編集・新規作成・ゴミ箱の画面を追加 ← new ## 使用技術 - Spring Boot 2.7.12 - Java 11 - Maven(ビルドツール) - MySQL(DB) - Mybatis(O/Rマッパー) ## テーブル定義 [こちら](https://qiita.com/Takatsuna/items/31af8b007a44f2c3a900)の記事を参照ください。 ##
元記事を表示

JAVA応用②

# 本日の課題 問題: 文字列内の"い"を"ゐ"に置き換えるプログラムを作成せよ ~~~ いか 赤いか スルメいか ~~~~ ## 例 ~~~~java package s; import java.util.ArrayList; public class q { public static void main(String[] args) { ArrayListlist =new ArrayList(); list.add("いか"); list.add("赤いか"); list.add("スルメいか"); for(int i=0;i
元記事を表示

なぜ"Hello, World!"なのか

**なんで"Hello, World!"なの?** もはや、エンジニアの登竜門、義務教育的な存在になっている"Hello, World!"の出力。使い方としては、標準出力のチュートリアルとして共通となっています。!マークを付けるかどうか、大文字小文字など、微妙な違いや種類はあるものの、なぜかみんな世界に挨拶をしていますよね。 大抵のプログラミング言語の入門書では、このプログラムを作ることを最初の例題としており、新しくプログラミング言語を習得する際に最初に作るのがこのプログラムです。 そのため、「**世界一有名なプログラム**」と呼ばれることもあります。 こんなこと疑問に持つ人も少ないと思いますが、講義や参考書などでも教わっていなくて、気になったので調べてみました。 # Hello, World!の目的 以下、Wikipediaから一部抜粋。 > ハロー・ワールドは伝統的にプログラミング言語をプログラム初心者に紹介するために使われる。また、ハロー・ワールドはプログラミング言語が正しくインストールされていること、およびプログラミング言語の使用方法を理解するための健全性テストにも使用さ
元記事を表示

主要言語で任意精度演算

# JavaScript ```fig.html




```

https://jsfiddle.net/orb85g0d/

# Python
Python 3ではintに上限はない模様。

```fig.py
# Python 3
a = "3"
b = "3"
for i in

【maven】jar とライブラリをまとめて展開用 zip 作成

## 概要
- バッチ用の jar を作成
- ライブラリの jar も lib ディレクトリにまとめて展開用 zip を作る
- 実行可能 jar ではない (Fat.jar, Uber.jar とは厳密には異なる)
- 実行する際は zip を unzip して展開後、java コマンドで
- java -cp "batch.jar;lib/*" <実行クラス> <パラメータ> として起動を想定

https://stackoverflow.com/questions/11947037/what-is-an-uber-jar-file

## 環境
- jdk 1.8
- maven 3
- maven-assembly-plugin 2.2

https://maven.apache.org/plugins/maven-assembly-plugin/single-mojo.html

## ローカルリポジトリがある場合
- 下記構成にしてプロジェクト内のローカル jar を取得可能
- ${project.basedir}/lib/[localGroupId]/[loc

ABC314A~D、Gの解答[Java]

## はじめに
今回はコンテスト中にDまで、コンテスト後にGが解けたのでそれを載せようと思います。

なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc314/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。

## A - 3.14
問題文は[こちら](https://atcoder.jp/contests/abc314/tasks/abc314_a)

問題文にあるものをコピーして、replaceメソッドを用いて小数第$N$位まで出力しました。
```A.java
final class Main {

private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in );
private static final SimplePri

WebSocketを使用し、サーバ側のSocketの状態を確認してみる

#### WebSokcet、Socket通信を使用して簡易的なChatアプリを作ってみました
websocketを使用すれば、クライアントからajaxを使用し、WebAPIをコールした際よりもレスポンスが早くなる可能性を感じ、そしてネイティブアプリなどで行っているSocket通信がWebブラウザから使用可能になるものと思い調査しつつ、Chatアプリを作成しました。

`完成イメージ`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530697/5748c586-16ca-158d-dc62-ce071f5542ad.png)

こちらが今回作成したコードになります。
https://github.com/yuki-yanagawa/WebSocketChatTest

## 目次
1. [ブラウザでWebSocketオブジェクトを作成し、 HTTPプロトコルを覗いてみる](#1-ブラウザでwebsocketを作成し-httpプロトコルを覗いてみる)
2. [WebSocket通信を

Javaで「ファイルの状態を調べる(実行可能/隠しファイル/読み取り/書き込み/シンボリック・リンク)」の動作を確認してみた

# 概要
Javaで「ファイルの状態を調べる(実行可能/隠しファイル/読み取り/書き込み/シンボリック・リンク)」の動作を確認してみました。以下のページを参考にしました。

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

# 実装
以下のファイルを作成しました。
```JSample7_1.java
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.*;

class JSample7_1{
public static void main(String[] args){
Path p1 = Paths.get("doc/memo1.txt");
Path p2 = Paths.get("doc/.memo2.txt");
Path p3 = Paths.get("doc/memo3.txt");

checkFile(p1);
checkFile(p2);
checkFil