JAVA関連のことを調べてみた2020年11月16日

JAVA関連のことを調べてみた2020年11月16日
目次

備忘録No.6「文字列として受け取った1桁の和差の式を計算する」[Java]

#はじめに
初めてgetNumericValueメソッドを使用したので、記録。

#やりたい事
・長さ自由の文字列で計算式を受け取る(使われる数字は全て1桁、演算子は’+’と’-‘のみ)
・受け取った文字列を数値にして計算
・計算結果を出力する

(例)
入力:”1+2+3″
出力:6

#コード
“`java
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
sc.close();
char [] c = line.toCharArray();

int sum = 0;
boolean add = true;

for(int i = 0; i < line.length(); i++) { if(i % 2 == 0) {//数値と演算子が交互に来るため、偶数は数値の計算,奇数は演算子の入れ替えを行う if(add) {

元記事を表示

【Java】部分文字列を抜き出す(AOJ13 – シャッフル)

#文字列から部分文字列を抜き出す
* Stringクラスのsubstringメソッド
* 第一引数に抜き出し開始の位置を設定

“`java
public class Main {
public static void main(String[] args) {
String str = “ねこはなんでこんなにMOFUいんでしょうか”;
//10~14文字目まで抜き出す
String mofu= str.substring(10,15);
//山崎を表示
System.out.println(mofu); //MOFUい
}
}
“`
#シャッフル(ITP1-9)
>1つのアルファベットが描かれた n 枚のカードの山をシャッフルします。
1回のシャッフルでは、下から h 枚のカードをまとめて取り出し、それを残ったカードの山の上に積み上げます。
カードの山は以下のように1つの文字列で与えられます。
abcdeefab
最初の文字が一番下にあるカード、最後の文字が一番上にあるカードを示しています。
例えば、これを h が 4 でシャッフ

元記事を表示

【Java】部分文字列/要素を検索(AOJ12 – リング)

AIZU ONLINE JUDGE の教材を使って勉強していきます
行いたい操作や文法をまとめ、
実際にその文法を使ってAOJを解答した例を載せています

#indexOfで部分文字列を検索
* **indexOfメソッド**
* 文字列に含まれる部分文字列を検索
* ヒット場合は、文字列のインデックス番号を返す(先頭0)
* **lastIndexOfメソッド**は文字列の後ろから検索
* 最初に見つかった位置のインデックスを返す

“`java

public class Main {
public static void main(String[] args){

String str1 = “Penpineappleapplepen”;
String str2 = “pineapple”;

int result = str1.indexOf(str2);

if (result != -1) {
System.out.println(str2 + “発見!”);
System.out.println(str2 +

元記事を表示

【Java】文字判定・文字列整形(AOJ11 – 文字のカウント)

#アルファベットの小文字かどうか判定
* ASCIIコード表で’a’から’z’は連続している
* ‘b’の値は’a’の値よりも1大きい
* c がアルファベットの小文字なら真になるコードを書くには
`c >= ‘a’ && c <= ‘z’` ```java //c がアルファベットの小文字なら真になるコード public class Main { public static void main(String[] args){ char c = 'c'; System.out.printf("確認したい文字cは? '%s'\n", c); /*cがアルファベットの小文字なら真*/ if (c >= ‘a’ && c <= 'z') System.out.println("c は小文字"); /*cが英小文字なら真*/ if (c >= ‘a’ && c <= 'z') System.out.println("c は小文字"); else

元記事を表示

Javaのプリミティブ特殊化まとめ

# 前置き

Java SE8の関数型インタフェースやStreamのプリミティブ特殊化についてまとめました。
目的はJava Gold試験対策です。

# プリミティブ特殊化とは

javaでは、Function\のR apply(T t) のT,Rのような型引数にはプリミティブを与えることができない。関数型インタフェースやStreamにおいては、int、long、doubleについても(ラッパークラスにボクシングせずに)ジェネリクスっぽく操作ができるように、個別にクラスがいくつか定義されている。これをプリミティブ特殊化を行った型という。
intだけ覚えておけばlong, doubleも差異は無い。

# 関数型インターフェイスの整理

## [java.util.function][1]の全関数型インタフェース
| 基本のクラス名 | intへの特殊化 | longへの特殊化 | doubleへの特殊化 | 基本のメソッド名 |
| —————– | –

元記事を表示

配列変数 と 連想配列 初学者が初学者向けにまとめた

どうも。
今まで掲示板等々を学習がてら作成してきましたが、5ヶ月というスパンで焦り走りしてきた事で
「フワッとした理解」で「〇〇機能は〇〇で実装できるだろう」と何となく分かるものの、Google先生の力がなければこれ一つ自分で実装できない僕が、
一つ一つの細かな理解が疎かであることから、
これから基礎の基礎を深く理解するためにアウトプットの場としてQiitaに投稿していきます。

自身でGoogle先生を活用して数十サイトや書籍を参考に理解を深めながら、
1、、実際にコードを書いて
2、、ノートに自分の言葉でいつかの自分が見ても伝わるようにまとめていく
3、、最後にQiitaに他の方が見ても分かるよう伝えていく

※間違い部分、誤解している箇所が出てくる可能性もあります。

[配列とは]

複数(プロパティ)のデータをまとめて整理して1つの大きな箱にいれるイメージ。
![333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677104/701939f0-44ad-f6f9-17f6

元記事を表示

【Java】暗黙的型キャスト(AOJ10 – 数字の和)

#型キャスト
* **char型は暗黙的にint型やdouble型にキャストできる**
* char型のラッパークラスCharacter型はUnicode文字表現
* ”1”の場合U+0031(16進法)49(10進法)
* char型の”1”が暗黙的にint型にキャストされた場合”49”が出力される
* 参考にさせていただきました
* [Why we use -‘0’ beside charAt(i)?](https://stackoverflow.com/questions/12438336/why-we-use-0-beside-charati)
* [【Java】char型はint型にキャストできる](https://qiita.com/nkojima/items/d358f99efa71655911ea) @nkojimaさま記事

“`java
public class Main {
public static void main(String[] args) {

char c = ‘1’;
//暗黙的にint

元記事を表示

【Java】文字列を大文字/小文字へ変換(AOJ⑨ – 大文字と小文字の入れ替え)

#大文字/小文字の変換
* 文字列を大文字/小文字へ変換
* **toUpperCase, toLowerCaseメソッド**
* 大文字/小文字かどうかを判別
* **isUpperCase. isLowerCaseメソッド**

“`java
public class Main {
public static void main(String[] args){
String str1 = new String(“MoHuNeKo”);
String upper_str1 = str1.toUpperCase();
String lower_str1 = str1.toLowerCase();

System.out.println(“入力文字列 : ” + str1);
System.out.println(“1文字目は大文字? : ” + Character.isUpperCase(str1.charAt(0)));
System.out.println(“大文字変換 : ” + upper_str1);

元記事を表示

[Spring Framework]Configurationの分割

# Configurationの分割
肥大化したJava Configを分割する方法です。

## Java Configの分割

### メインクラス
分割したサブクラスを`@org.springframework.context.annotation.Import`で読み込む。

“`java:AppConfig.java
@Configuration
@Import({SubConfig.class, Sub2Config.class})
public class AppConfig {
// subConfig.class, sub2Config.classに定義したBeanがインジェクションされる
}
“`

### 分割したサブクラス
`@Configuration`をつける

“`java:SubConfig.java
@Configuration
public class SubConfig {
@Bean
UserService userService() {
// ・・・
}
}
“`
“`java:Sub2Config.java
@C

元記事を表示

【Java】多次元配列・内積計算(AOJ⑦内積)

#多次元配列

“`java
// 3*4*5の三次元配列
init [][][] list = new int [3][4][5];
// 2次元配列を初期化して宣言
int [][] list = [
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
//var で初期化して宣言
var list = new int[][] [
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
// 0行1列目にアクセス
System.out.println(list[0][1]); //2
“`

#ジャグ配列
* 長さが異なる多次元配列
* 最初の宣言では外側のサイズのみ指定
* 1次元目は確保しないといけないが2次元目は確保不要
* **2次元以降はダイナミックに変更できる!**
* ユースケース
* 全人口の給料の配列を作るときに都道府県ごとに作成
* `int [][] = salary = new int[47][];`

“`java
var list = ne

元記事を表示

【Java】データ型・行列の積(AOJ⑧行列の積)

#データ型(データの種類)
* データの**種類と大きさにあったデータ型**を使う
* **byte, char**:バイトデータを格納する
* **short**:小さな整数を表す
* **long**:intで対応できない数値範囲を扱う場合のみ
* 参考:
[【Java】データ型①-基本型](https://qiita.com/suema0331/items/5095f79e540967c2a407#java%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B)

“`java
public class Main {
public static void main(String[] args){
//int型の最小値と最大値を確認する
System.out.println(“int 最小/最大値= ” + Integer.MIN_VALUE+” ~ “+Integer.MAX_VALUE);
System.out.println(“byte 最小/最大値=

元記事を表示

SpringBootことはじめ 0.SpringCLIを使う

# はじめに
職場でSpring(Framework)を使うことになったので
前々から興味のあったSpringBootを触ってみることにした。
ちなみに SpringBoot≠SpringFramework だけどプライベートではあえてSpringBootを選択。

今回は、SpringBootの前にSpringCLIでお試し。

# 環境

|ソフトウェア|バージョン|
|:–:|:–|
|OS|Windows10 Pro|
|Java|OpneJDK 12.0.2|
|Spring CLI|v2.3.5.RELEASE|

# 実施
## 1. SpringCLIを落とす。
[公式入門ドキュメント(日本語)](https://spring.pleiades.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-installing-the-cli)に記載してある`spring-boot-cli-2.3.5.RELEASE-bin.zip`を落として解凍。
解凍後のフォルダ配

元記事を表示

【Java】多次元配列を出力・表計算(AOJ⑥表計算)

#StringBuilderで文字列表現を返す
* StringBuilderで出力する時に気をつけないと以下のエラーに。。
`cannot convert from StringBuilder to String`
* StringBuilderで連結結果をコンソール出力のみなら、**printlnメソッド**が引数に指定された任意のオブジェクトに対して`String.valueOf`からの`sb.toString`を呼び出す
* println は引数が文字列でなかったときに toString を呼び出してくれてた

“`Java
StringBuilder sb = new StringBuilder();
System.out.println(sb);
“`
* Stringとして結果を得る必要があるなら**toStringを明示的に呼び出す**
* **StringBuilderのtoStringメソッド**
* 新しいStringオブジェクトを割り当て、初期化し、このオブジェクトの現在の文字列を返す

“`java
StringBuilder

元記事を表示

【Java】文字取得・boolean型用途(AOJ⑤不足しているカードの発見)

#文字列から指定位置の1文字を取得
* **charAtメソッド**
* `文字列.charAt(指定位置);`

“`java
public class Main {
public static void main(String[] args){

String str = “もふもふねこ”;
System.out.println(str.charAt(0)); //も
System.out.println(str.charAt(3)); //ふ
System.out.println(str.charAt(4)); //ね
System.out.println(str.charAt(5)); //こ
}
}
“`

#boolean型の用途
* boolean型は、true(はい)またはfalse(いいえ)の判定結果を入れるために利用できる
* 数値や文字列の比較結果を表す
* if文で分岐の方向を表す
* for文やwhile文でループを続行するか決定する

“`java
//数値比較
public class Main

元記事を表示

【Java】ArrayListクラスのオブジェクト操作 (AOJ④数列の反転)

#ArrayListクラス(可変長配列)のオブジェクト操作
* リストは**配下の要素が順序づけられたコレクション**
* ArrayListは内部的に配列を利用したデータ構造になっていて**後からでも要素追加削除可能**
* cf: 配列は不可
* インデックス値による値の読み書き(ランダムアクセス)は、**位置によらず一定時間でアクセス可能**
* **値の頻繁な挿入削除は低速**
* 挿入時に確保していたメモリの領域を超えると自動でメモリ再割り当てが発生する(→あらかじめ要素数が想定される場合サイズ宣言しよう)

###定義
* `ArrayList<型> リスト名 = new ArrayList<型>();`
* <型> にクラス名を指定
* 指定したクラスの**オブジェクトを要素として格納できるようになる**
* 基本型を扱うリストを作成したい場合は、ラッパークラスで定義(ex: int型のラッパークラスはIntegerクラス)

###要素の並べ替え
* Collectionsクラスの**sortメソッド**
* リストの要素を自然昇順でソー

元記事を表示

超初心者が覚えたてのJavaでLoto6の購入案を自動生成する

#導入
友人(プログラミング経験者)「お前プログラミング始めたんだって?」

私「うんそだよー」

友人「じゃあLoto6の数字を決めてくれるプログラミング作ってみてよ」

私「余裕でしょ\:wink:」

#始めに
ロト6は、1~43の数字の中から異なる6個の数字を選ぶ数字選択式宝くじです。

タイトルにもあるように私はプログラミング初心者なので、超簡単にJavaでロト6の数字を選んでくれるコードを書こう!の記事です。
当然ながら過去当選番号等をスクレイピングして~なんてことはしません。~~というかスクレイピングってなに?~~

奮闘記のような形になってますので、初心者の頃を思い出して生暖かい目で見て頂ければと思います。

##案1(ゴリ押し)
早速だけどコードを書いていく。

私「えーと、まずは6個の数字を格納する配列を作って・・・・・・」
私「当然、1~43の数字をランダムで選ぶんだからRandomクラスは必須だよね~」

“`java

int[] numbers = new int[6];
for (int i = 0; i < numbers.length; i++)

元記事を表示

【Java】ConcurrentModificationExceptionとは何か

#プログラミング勉強日記
2020年11月15日
Javaでコードを書きテストを使用してあっているか確かめていたところ、`java.util.ConcurrentModificationException`という例外が発生したのでConcurrentModificationExceptionとは何なのか、どうすればいいのかまとめる。

#ConcurrentModificationExceptionとは
 [ ConcurrentModificationExceptionのJavadoc](https://docs.oracle.com/javase/jp/7/api/java/util/ConcurrentModificationException.html)には以下のように書いてある。

> この例外は、オブジェクトの並行変更を検出したメソッドによって、そのような変更が許可されていない場合にスローされます。

 基本的には、繰り返しているものが変更されたときに早めに失敗して例外を投げるフェイルファーストするために使用される。つまり、繰り返し処理を終了する前に例外が発生

元記事を表示

Observer Pattern

複数のObserverが一つのオブジェクトの状態変化を監視する
監視されるクラスは複数のObserverインスタンスを保持し、Observerクラスのメソッドを使って状態変化を各Observerに通知する
Observerは監視対象のクラスオブジェクトを保持する

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|Mediator.class|各Observerクラスが監視するオブジェクト
各ObserverクラスのインスタンスをListに格納
Listにインスタンスがadd()されたら、全ObserverにListのsizeを通知する|
|abstract
Observer.class|監視対象のMediatorインスタンスを保持する
Mediatorが利用するメソッドを実装|
|ob1.class~ob2.class

元記事を表示

Javaの配列とArrayListの違いについて、似た機能のメソッドを比較・対応してみた

# はじめに

Javaの問題を解くとき、プログラムの作成条件として、”配列を使うように”とのお達しがあったのですが、
「はて、ArrayListではアカンのか?」
「そもそも配列ってなんだったっけ、めちゃくちゃ曖昧にしか認識してない」
と感じたので色々と調べてみました。
複数の言語を触った経験が悪影響を及ぼし、『リスト』『タプル』『配列』『ArrayList』など、あらゆるキーワードがごちゃまぜになっている状態です。
Javaに限ってもLinkedListなんてものもまだありますし、整理がなかなか大変です。

網羅的に、そして深くまで把握するのは今の自分には厳しかったのと、更にそれを記事にまとめるのも厳しいと感じたので、
ふわっとした感じ、「とりあえず間違ってはいない」という内容になるように努めました。
ジェネリクスだとか実装だとか、そういったものはまだ理解&説明しきれる気がしません・・

# 実行環境
[Paiza.io] (https://paiza.io/ja/projects/new) : openjdk version “15” 2020-09-15)

# この記事でわ

元記事を表示

Logbackでログメッセージ内の秘密情報をマスク

## 概要
マスク対象を正規表現で抽出できることが条件だが、Logbackの設定において **`%replace`** で文字列を置換できる。

* http://logback.qos.ch/manual/layouts_ja.html#cwOptions ← クレジットカード番号をマスクする例

[Javaの正規表現](https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html)の機能や、キャプチャした部分文字列の参照を利用すれば、上の例より難しい条件でのマスクもできる。その例と実際のコードを記す。

## 例
以下のログには、ユーザーID・トークン・リソースIDが*どれも同じ形式*(十六進32桁)で出力されている。このうち**トークンのみ**をマスクしたい。

“`text:ログの例
2020-11-14T09:30:52.774+09:00 [main] INFO com.example.Main – UserID: 35f44b06a3cf8dab8355eb8ba5844c73, To

元記事を表示

OTHERカテゴリの最新記事