Java

基本構文

データ型

分類データ型サイズ[byte]設定可能値ラッパークラス
論理値boolean-true, falsejava.lang.Boolean
文字char2\u0000~\uFFFFjava.lang.Character
整数byte1-128~127java.lang.Byte
short2-32,768~32,767java.lang.Short
int4-2,147,483,648~2,147,483,647java.lang.Integer
long8-9,223,372,036,854,775,808~9,223,372,036,854,775,807java.lang.Long
浮動小数float4単精度浮動小数点数java.lang.Float
double8倍精度浮動小数点数java.lang.Double

条件分岐

if文

if (hoge == 1) { // hogeの値が、1の場合に実行する。 } else if (hoge == 2) { // hogeの値が、2の場合に実行する。 } else { // hogeの値が、1でも2でもない場合に実行する。 }

switch文

switch (hoge) { case 1: // hogeの値が、1の場合に実行する。 break; case 2: // hogeの値が、2の場合に実行する。 break; default: // hogeの値が、1でも2でもない場合に実行する。 break; }

ループ処理

for文

for (int i = 0; i < 10; ++i) { // 処理 }
List<String> list = new ArrayList<>();  ・・・ for (String str: list) { // 処理 }

while文

int i = 0; while (i < 10) { // 処理 ++i; }

do-while文

int i = 0; do { // 処理 ++i; while (i < 10)

文字列操作

文字列判定

用途メソッド
内容比較(大小文字区別あり)public boolean equals(Object o)
内容比較(大小文字区別なし)public boolean equalsIgnoreCase(String s)
文字列長public int length()
空文字判定public boolean isEmpty()

文字列判定

用途メソッド
指定文字列を含むか判定public boolean contains(String s)
指定文字列で始めるか判定public boolean startsWith(String s)
指定文字列で終わるか判定public boolean endsWith(String s)
指定文字が最初に登場する位置を判定public int indexOf(int ch)
指定文字列が最初に登場する位置を判定public int indexOf(String s)
指定文字が最後に登場する位置を判定public int lastIndexOf(int ch)
指定文字列が最後に登場する位置を判定public int lastIndexOf(String s)

文字列切り出し

用途メソッド
指定位置から1文字切り出しpublic char charAt(int index)
指定位置から文字列を切り出しpublic String substring(int index) public String substring(int index, int endIndex)
String s = "abcdefghijklmn"; System.out.println("3文字目以降: ", s.substring(3)); System.out.println("3文字目から4文字: ", s.substring(3, 7));
3文字目以降: defghijklmn
3文字目から4文字: defg

文字列編集

用途メソッド
小文字に変換public String toLowerCase()
大文字に変換public String toUpperCase()
前後の空白を除去public String trim()
文字列を置換public String replace(String before, String after)

文字列連結

※StringBuilder: シングルスレッド向け、StringBuffer: マルチスレッド向け

+演算子による結合
String s = "hoge1" + "hoge2";
StringBuilder
StringBuilder sb = new StringBuilder(); sb.append("hoge1"); sb.append("hoge2"); String s = sb.toString();
StringBuffer
StringBuffer sb = new StringBuffer(); sb.append("hoge1"); sb.append("hoge2"); String s = sb.toString();

文字列分割

split

※正規表現も指定可能

String s = "abc,def"; String[] words = s.split(","); for (String w : words) { System.out.println(w); }
abc
def

文字列置換

replaceAll

※正規表現も指定可能

String s = "abcd"; String w = s.replaceAll("bc", "X"); System.out.println(w);
aXd

String⇔char/byte配列の相互変換

String s = "abcdefg"; char[] data1 = s.toCharArray(); byte[] data2 = s.getBytes(java.nio.Charset.forName("utf-8")); // 文字コードは省略可能 String data3 = new String(data1);

正規表現

パターン指定方法

パターン説明使用例補足
.任意の1文字(改行は除く)任意の3文字
?直前の文字が0回または1回a?bcabcまたはbc
*直前の文字を0回以上繰り返しab*a、ab、abb、abbb、abbbb・・・
+直前の文字が1回以上繰り返しab+ab、abb、abbb、abbbb・・・
^行頭^abcabcで始まる行に一致
$行末abc$abcで終わる行に一致
[]括弧内の任意の1文字に一致[abc]abcの1文字に一致
 [a-z]小文字のaからzまでの1文字に一致
 [A-Z]大文字のAからZまでの1文字に一致
 [0-9]数字の0から9までの1文字に一致
[^]括弧内の文字に一致しない[^abc]abcの文字に一致しない
{}直前の文字を指定回数繰り返し{n}n回繰り返し
 {n,}n回以上繰り返し
 {,m}m回以下繰り返し
 {n,m}n回以上m回以下繰り返し
|いずれかの文字列に一致foo|barfooまたはbarに一致
\w任意の英数字と_(アンダースコア)の1文字に一致 ([a-zA-Z_0-9]と同値)  
\W任意の英数字と_(アンダースコア)以外の1文字に一致  
\s任意の空白文字(スペース、タブ、改行、復帰)の1文字に一致  
\S任意の空白文字(スペース、タブ、改行、復帰)以外の1文字に一致  
\d任意の数字1文字に一致 ([0-9]と同値)  
\D任意の数字以外の1文字に一致  
()括弧内に一致した文字列をグループ化する  

エスケープ

以下のように、エスケープする文字の直前に\を記述する。

String s = "^\\.\w*"; // .(ドット)から始まる文字列

Stringクラスのmatchesメソッド

String s = "hogehoge"; if (s.matches("[a-z]{8}") { // 処理 }

Patternクラス、Matcherクラス

import java.util.regex.Pattern; import java.util.regex.Matcher;  ・・・ String s = "123or456"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher match = pattern.matcher(s); while (match.find()) { System.out.println(m.group()); }
123
456

API

日時

日時取得

Dateクラス
import java.util.Date; import java.text.SimpleDateFormat;  ・・・ Date now = new Date(); System.out.println(now); SimpleDateFormat sdf = new SimpleDateFormat("yyyy'/'MM'/'dd' 'HH':'mm':'ss"); System.out.println(sdf.format(now));
Sun Jun 10 15:16:09 JST 2018
2018/06/10 15:16:09
Instantクラス、ZonedDateTimeクラス

※Java8以降

import java.time.*;  ・・・ Instant i = Instant.now(); ZonedDateTime z1 = i.atZone(ZoneId.of("Asia/Tokyo")); ZonedDateTime z2 = ZonedDateTime.now(); System.out.println(z1); System.out.println(z2);
2018-06-10T22:33:08.600+09:00[Asia/Tokyo]
2018-06-10T22:33:08.728+09:00[Asia/Tokyo]
LocalDateTimeクラス

※Java8以降

import java.time.*;  ・・・ LocalDateTime t = LocalDateTime.now(); System.out.println(t);
2018-06-10T22:36:11.303

時刻を表すクラスと保持情報

※Java8以降

クラス時刻ゾーン
ZonedDateTime
LocalDateTime
LocalDate
LocalTime
Year
YearMonth
Month
MonthDay

時間の計算

Periodクラス
import java.time.*; import java.time.format.*  ・・・ LocalDate from = LocalDate.of(2017, 4, 1); LocalDate to = LocalDate.of(2018, 6, 10); Period period = Period.between(from, to); System.out.println(period); System.out.println(period.getYears()); System.out.println(period.getMonths()); System.out.println(period.getDays()); System.out.println(period.toTotalMonths());
P1Y2M9D      ※1年2か月9日の意味
1
2
9
14
Durationクラス
import java.time.*;  ・・・ LocalDateTime from = LocalDateTime.of(2018, 6, 10, 10, 0, 0); LocalDateTime to = LocalDateTime.of(2018, 6, 10, 23, 59, 59); Duration duration = Duration.between(from, to); System.out.println(duration); System.out.println(duration.toDays()); System.out.println(duration.toHours()); System.out.println(duration.toMinutes()); System.out.println(duration.getSeconds());
PT13H59M59S    ※13時間59分59秒という意味
0
13
839
50399

ストリーム

ファイル読み込み

import java.io.FileReader;  ・・・ String filename = "c:\\hoge.txt" FileReader reader = new FileReader(filename); char c = (char)reader.read(); // 1文字読み込み reader.close();

ファイル書き込み

import java.io.FileWriter;  ・・・ String filename="c:\\hoge.txt" FileWriter writer = new FileWriter(filename); writer.write('あ'); writer.close();

Webページ取得

import java.io.InputStream; import java.net.URL;  ・・・ URL url = new URL("https://s-soto.mydns.jp/wiki"); InputStream in = url.openStream(); int i = in.read(); while (i != -1) { System.out.print((char)i); i = in.read(); } in.close();

DB

DB接続/切断

import java.sql.*;  ・・・ Class.forName("org.h2.Driver"); String url = "jdbc:h2:~/db"; Connection conn = DriverManager.getConnection(url); // DB接続 conn.close(); // DB切断

SQL実行

import java.sql.*;  ・・・ Connection conn = DriverManager.getConnection(url); String sql = "INERT INTO XXXX(name) VALUES('hoge')"; conn.createStatement().executeUpdate(sql); // SQL実行