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

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

startsWithメソッド/endsWithメソッド、splitメソッド、appendメソッド

初学者ですが、個人的な勉強のためまとめました

##startsWithメソッド/endsWithメソッド

・文字列が引数で指定された文字で始まるか(終わるか)どうかを調べるためのメソッド
・調べた結果は**真偽値**で返される

##splitメソッド

・文字列を**分割**するためのメソッド
・分割する箇所は、**正規表現**で指定

##appendメソッド

・文字列に新しい文字列を追加する**StringBuilderクラス**のメソッド
・文字列リテラルと変数の値を使って動的に文字列組み立てるときに使う
 ※**リテラル**・・・ソースコード内で変数に代入される**値**のこと
・オーバーロードされ、様々な種類の引数を受け取ることができる
 ①**プリミティブ型**(8種類すべて)
 ※**プリミティブ型**・・・boolean、char、byte、short、int、long、float、double
 ②**String**
 ③**char配列**
 ④**オブジェクト**
 など

・プリミティブ型はすべて文字列に変換。例えば、trueという真偽リテラルは”tr

元記事を表示

JavaからKNPを呼び出すWrapperを作った

# 3行でわかる記事の内容
* JavaからJuman++, KNPを呼び出すWrapperを作った
* マルチプロセスで走らせるので~~マシンパワーがあれば~~複数文を高速に処理できる
* 結果のparseは自前で実装したParserを用意すれば任意のクラスに変換可能

# 概要

最近はNLP界隈にもDeepの波が押し寄せてきているので「今どきKNPとか使わないよ」という方もいるかもしれません。
とはいえ、まともなデータが無くてよくある手法が使えない、とかDeepな手法を試す前にとりあえずルールベースでどれくらいの結果になるのか試したい、みたいなときには格解析結果や各種Featureなどの豊富な情報を得られるKNPは未だに重宝する存在です。

その一方で、Sudachiのようにライブラリとして使えるわけではないので(pyKNPがあるPython以外の言語では特に)プログラム内で使うのが地味に手間だったりします。

というわけで今回はJavaからKNP(とJuman++)を呼び出すWrapperライブラリを作りました。
Mavenリポジトリに公開するところまでやっておきたかったのです

元記事を表示

Javaのアノテーションを自作する

# アノテーションとは
クラスやメソッド、パッケージなどに対して付加情報を付与する機能。

## アノテーションを自作する
“`java
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(TYPE)
public @interface TestAnnotation {
String testValue();
}
“`

### `@Retention`
アノテーションの情報が保持される範囲を指定します。

– `SOURCE` コンパイラによって破棄される。
– `CLASS` コンパイラによってクラスファイルに記録されるが、実行時には読み込まれない。(デフォルト)
– `RUNTIME` コンパ

元記事を表示

JavaでArduinoを動かしてみた!

### はじめに
[ラクス Advent Calendar 2019](https://qiita.com/advent-calendar/2019/rakus)の10日目です。
昨日の記事は@choreiさんの[Vuetify公式ドキュメントの読み方](https://qiita.com/chorei/items/d2390b58a342f0c314eb)でした。

今回の記事は、JavaのプログラムでArduinoを動かしてみたお話です。
[Oracle Code One 2019 報告会](https://jjug.doorkeeper.jp/events/98354)で聴講したセッションに触発されて、Java + Arduinoで色々試してみました。

### Arduinoとは
本題に行く前に、Arduinoについて軽く説明します。
Arduinoは、AVRというマイクロコンピュータと入出力ポートを備えた基盤で、制御にArduino言語というCに似た言語を利用します。
※基盤と言語を合わせてArduinoと呼ぶこともあるようです

制御するためのプログラムを**スケッチ**と

元記事を表示

Object#clone() メソッドからスローされる CloneNotSupportedException はどのようにハンドリングするべきか

(この記事は [地平線に行く](https://yujisoftware.hatenablog.com/entry/CloneNotSupportedException) とのマルチポストです)

Java の `Object#clone()` メソッドは ` throws CloneNotSupportedException` が宣言されています。

“`java

protected native Object clone() throws CloneNotSupportedException;
“`

しかし、**クラスが `Cloneable` インタフェースを実装していれば `CloneNotSupportedException` はスローされません。**
それにもかかわらず `CloneNotSupportedException` はキャッチ例外のため[^CloneNotSupportedException]、スローするかキャッチする必要があります。

[^CloneNotSupportedException]: 設計ミスだと思います。

“`java

元記事を表示

授業で習ったJavaの復習をつらつらと part3

# はじめに
part1, 2を読んでから見よう。須く。
今回からオブジェクト指向、クラス等分かりづらい部分を触れるので**気合い入れて行きましょう**

# ファイルを分ける

Javaではオブジェクト指向型を採用しており、初心者が理解するときの壁になっている。概要から申し上げると、「この世のモノ全部オブジェクト(物体)でしょ?」といった考え方である。具体例を出すと、**「食べ物」は抽象的な概念でモノとしてはいっぱい種類がある**が、**「カレーライス」は一般的に固定のモノ**として存在している。これらを「オブジェクト」と呼んでいるにすぎないのだ。

## じゃあどうやって書くんじゃ

オブジェクト指向を記述する上で、まずJavaで複数のファイルを扱う方法を記述する。これは**ファイルごとに**どんなものを記述しているか大まかに分けたいからだ。
以下はキーボード(標準入力)で読み取った数字を計算させるプログラムで、ファイルを分けて計算処理だけを別ファイルに保存している。

“`java/Main.java
//大まかな処理を記述しているファイル
import java.io.*;

元記事を表示

dokojavaで「大石泉すき」を出力する

#はじめに

この記事は[「大石泉すき」 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ohishi-izumi-suki)への参加記事です。
今回はプログラミング経験が未経験のP(プロデューサー)でも、プログラミングが気軽に体験できるdokojavaを使用して「大石泉すき」を出力する方法をご紹介します。
筆者自身、開発経験が少ないので、間違った記述がございましたら、ご指摘お願い致します。

#dokojavaとは

[「dokojava」](https://dokojava.jp/sources/Main.java)は、Java言語で記述したコードをブラウザ上で実行できる開発環境です。

#使い方

##コード
コードを記述したら、画面右下端の「≫」ボタンをクリックします。

コード.PNGもしこの世にDIコンテナがなかったら。

この記事は[ただの集団 Advent Calendar 2019](https://adventar.org/calendars/4054)の9日目の記事です。

ネット上に非常に多くの記事があるので、DIコンテナの話はほとんどしません。(~~釣りタイトル~~)

この記事では、DIコンテナの目的である、

#### オブジェクトの生成と利用の分離
#### 制御の反転

の話をしますmm

もしこの世にDIコンテナが存在していなくて、DIコンテナが行なっていることを手動でしなければいけない場合、どのような実装が考えられるのか、実際にコードを書いてみます。

## 前提知識
### DIコンテナとは

アプリケーションにDI(Dependency Injection: 依存性注入)機能を提供するフレームワーク。

詳しくは、以下の記事にまとめられているので参照してください。

[DIコンテナとは](http://si.comp.ae.keio.ac.jp/web_app_dev_material/app/di_container/)
[DI・DIコンテナ、ちゃんと理解出来てる・・? –

元記事を表示

The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated.

### 現象

次のようにJaCoCoのレポート対象から特定のクラスを除外している場合に、

“`gradle
jacocoTestReport {
reports {
html.enabled = true
xml.enabled = true
}
afterEvaluate {
// 自動生成されるクラスをカバレッジ集計対象から除外
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: [
‘**/_*.class’, ‘**/*DaoImpl.class’
])
})
}
“`

Gradle 6.0で `JacocoReportBase#setClassDirector

元記事を表示

JavaにおけるHashMapの仕組みを深堀り

# HashMapの基本
– Map(key,valueの格納データ形式)の実装クラスで多分一番使われているやつ。
– Hash関数を使って高速にデータの検索が可能(配列・リストの線形検索より計算量が少ないとされる)

“`
HashMap map = new HashMap<>();
map.put(“Sato”, 22);
map.put(“Takahashi”, 24);
map.put(“Nomura”, 32);
“`

# HashMapの仕組み
(1) HashMapの格納できる数が5の例で考える。
(2) “`key:Sato value:22“`を格納しようとする。
a. Satoのハッシュ値144を算出する(例なので適当な数字です)
b. 144を要素数の5で割ってあまりを取得 144/5 = 28 …4
c. 4に“`key:Sato value:22“`を格納する。

“`
[0]
[1] [Nomura, 32]
[2]
[3] [Takahashi,

元記事を表示

indexOfメソッド、substringメソッド、replaceAllメソッド、replaceメソッド、charAtメソッド、trimメソッド

初学者ですが、個人的な勉強のためまとめました

##indexOfメソッド
・引数で指定された文字(列)が文字列の、**どの位置に存在するか**を調べるためのメソッド
・下記の例ではindexOfメソッドの引数の中に「c」という文字を入れると、2が戻される
・もし、文字が存在しなければ**-1**が戻される

(例)引数が文字の場合

“`Sample.java
String str=”abcde”;
System.out.println(str.indexOf(‘c’));
“`

・文字列を引数に入れた場合、その文字列が始まる**最初の文字列**を戻す
・下記の例ではindexOfメソッドの引数の中に「cd」という文字を入れると、2が戻される
・もし、文字列が存在しなければ**-1**が戻される

“`Sample.java
String str=”abcde”;
System.out.println(str.indexOf(“cd”));
“`

##substringメソッド
・文字列から任意の文字列を**抽出**するメソッド
・抽出する文字列の指定は、**第

元記事を表示

java競技プログラミングmemo

#はじめに
javaで競技プログラミングをするときによく使うコードをまとめた。
C++に比べ、javaで競技プログラミングをしている人は少なく、情報が少ないため、この記事の執筆に至った。
標準ライブラリのみ使用することを想定している。

##基本コード
コンテスト開始前に、以下のようにコードを用意している。

“`java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.println();
}
}
“`
また、以下のように定義している。

“`java
static int MOD = 1000000007;
“`

##入力

###配列の入力
Arrays.setAllを用いることで、for文を使うよりもすっきりとした記述ができる。

“`java
int[] a = new int[N];
Arrays

元記事を表示

Java Mapをループさせる方法(forEach / 拡張for文)

JavaでMapをループさせる方法をメモ

“`
Map map = new HashMap<>();
// mapのkey,valueのset処理は省略

// forEachのパターン
map.forEach((k, v) -> {
System.out.println(k);
System.out.println(v);
});

// 拡張for文のパターン
for(Map.Entry entry : map.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
“`

forEachの方がすっきりして見やすいかも。

元記事を表示

リフレクションなるものを知った

##なんか不思議でおもしろいぞこれ

“`Reflection.java
package reflection;

import java.lang.reflect.Method;

public class Reflection {

private static void test(Class t) {

try {
// インスタンスを取得
Object instance = t.newInstance();

// メソッドを取得
Method method = t.getMethod(“test”, String.class);

// メソッド実行
method.invoke(instance, “わっほい”);

} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
test(ReflectionTest

元記事を表示

Processingでクリスマス

普段データ操作とかユーザーインターフェースのプログラムばかり書いていると、たまには仕事とまったく関係ないプログラムを書きたくなりますよね。
そんな訳で今回はProcessingでちょっとクリスマスっぽい絵でも描いてみましょう。

# Processingとは
Processingは電子アートとビジュアルデザインのためのプログラミング言語であり、統合開発環境です。
こう書くと少し難しいものに思えるかもしれませんが、プログラムを書くことで絵を描けるくらいに考えてもらっても大丈夫だと思います。
記述したプログラムによる変化が視覚的にすぐにわかるので、データ操作をするようなプログラムよりも実行結果の違いがわかりやすいという特徴があります。

ProcessingはJavaで作られており、プログラムも基本はJavaで記述しますが、モードを追加することでPythonやJavaScriptなどでも記述できます。
自分の興味のあるプログラミング言語でProcessingにトライしてみましょう。

# インストールしてみよう
Processingのインストールは下記のページからZIPファイルをダウンロー

元記事を表示

[Java11] Stream API まとめ -Streamによるメリット-

## Stream とは

> コレクションに対するマップ-リデュース変換など、要素のストリームに対する関数型の操作をサポートするクラスです。
引用元: [公式ドキュメント](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/stream/package-summary.html#StreamOps)

### まずは実際に見てみる

[公式リファレンス](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/stream/Stream.html)より抜き出したものを一部改変

“`java:stream.java
final int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())

元記事を表示

楽しい楽しいプログラミングの勉強会に参加しよう!

#自己紹介
初めまして!
私は独学でプログラミングをしている高校生です。
一番好きな言語はJavaです

プログラミングの成果や出来事をメインに書いていこうと思います

#概要

私は11月27日に初めてCoderDojoにニンジャとして参加して12月8日にCo-KonPILE #0に参加しました。
そこで私が学んだことや楽しかったこと、よいところを説明します

#勉強会やイベントに行きたいと思ったきっかけ

私が独学でプログラミング始めたのは、中学1~2年生の頃です。
お年玉でRaspberry Pi 2を購入して、プログラミングを勉強しました
しかし、当時私の周りにはプログラミングを一緒にやる仲間がいなくて、ただ一人で独学していました。
友人と少し一緒にJavaをやったことはあります

高校2年生になって、さすがに一人でやるのも疲れてきたので、ノートパソコンを持っている今、
無料で参加できるプログラミング会を探すことにしました。

#CoderDojoとの出会い

初めての参加で作成したプログラムは、Jsoupを使ったGoogleのロゴ画像のURLを取得する簡単なプロ

元記事を表示

Swift Network.framework Study 20191208「Send and Receive」

# Study

Network.framework
Study:Send and Receive

## 環境

Client:Swift、Xcode
Server:Java、NetBeans

# Client Source Swift

## main.swift

“`swift
import Foundation
import Network

var sendAndReceive = SendAndReceive(host: “localhost”, port: 7777, nWParameters: .tcp)

sendAndReceive.startConnection()

while sendAndReceive.running {
sleep(1)
}
“`

## SendAndReceive.swift

“`swift
import Foundation
import Network

class SendAndReceive {
public var running = true
private var host:NWEnd

元記事を表示

Apache POIを使ったExcel操作

#はじめに
Apache POIを使ってcsvからExcelに出力してみました。ついでに棒グラフも出力させました。
こんな感じです

|template.xlsx|output.xlsx|
|:———–:|:———:|
|template.gif|output.gif|

初学者のため、至らぬ点も多々あるかと思いますが、ご意見等頂けると幸いです。
>
github
https://github.com/y012/POI

元記事を表示

Springboot + Thymeleafでテキストリンクを実装する

# Springboot + Thymeleafでテキストリンクを実装する

初めまして。ドアベルと申します。今回はタイトルの通りの実装を行います。

## 自己紹介
都内のSES専門会社で、現在某Java案件に参画中です。今年8月にテンショクカツドウ!をして人間を取り戻しました。
アイカツは良いぞ。

## 今回の環境
– Win10
– javac 9.0.1
– Thymeleaf 2.1.3

## 実装の概要
– テキストリンクを押下すると硝子ドールのMVページに飛ぶ

硝子ドールはアイカツ!シリーズにおける藤堂ユリカというキャラクターの持ち曲なのですが、
とにかくカッコ良すぎて、初めて見たときにかなり衝撃を受けました。今回はそんな楽曲のMVリンク
に遷移できるような実装をしてまいります。

## アイカツとは

> 『アイカツ!』は、バンダイが発売するトレーディングカードアーケードゲーム筐体・データカードダス(DCD)を使用した日本の女児向けアーケードゲーム。ゲームは2012年10月25日に稼動を開始した。キャッチコピーは「国民的アイドルオーディションゲーム」。
> [ア

元記事を表示

OTHERカテゴリの最新記事