Java
基本構文
データ型
分類 | データ型 | サイズ[byte] | 設定可能値 | ラッパークラス |
---|---|---|---|---|
論理値 | boolean | - | true, false | java.lang.Boolean |
文字 | char | 2 | \u0000~\uFFFF | java.lang.Character |
整数 | byte | 1 | -128~127 | java.lang.Byte |
short | 2 | -32,768~32,767 | java.lang.Short | |
int | 4 | -2,147,483,648~2,147,483,647 | java.lang.Integer | |
long | 8 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 | java.lang.Long | |
浮動小数 | float | 4 | 単精度浮動小数点数 | java.lang.Float |
double | 8 | 倍精度浮動小数点数 | 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?bc | abcまたはbc |
* | 直前の文字を0回以上繰り返し | ab* | a、ab、abb、abbb、abbbb・・・ |
+ | 直前の文字が1回以上繰り返し | ab+ | ab、abb、abbb、abbbb・・・ |
^ | 行頭 | ^abc | abcで始まる行に一致 |
$ | 行末 | 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|bar | fooまたは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実行