Java クラスライブラリ

Java8 リファレンス 正規表現 ファイル読み込み Javadoc JUnit Stream

String

length()長さを返す
isEmpty()空文字列ならtrueを返す
indexOf(文字列)検索。見つかった位置(0~)を返す。存在しなければ-1。
indexOf(文字列, 開始位置)検索を開始位置から行う。
lastIndexOf(文字列)後ろから検索。見つかった位置(0~)を返す。存在しなければ-1。
substring(開始, 終了)部分文字列を返す。開始位置から終了位置の1つ前まで。
charAt(位置)その位置の1文字を返す。
contains(文字列)文字列を含んでいればtrueを返す。
equals(文字列)同じならtrueを返す。
replace(検索文字列,変更文字列)検索文字列を変更文字列に置換
startWidth(文字列)文字列で始まるならtrueを返す。
endsWidth(文字列)文字列で終わるならtrueを返す。
split(区切り文字)区切り文字で文字列を分割し配列で返す。
maches(正規表現)正規表現にマッチすればtrueを返す。

Math

全てstaticメソッド。

max(数1, 数2)大きい方を返す
min(数1, 数2)小さい方を返す
abs(数)絶対値を返す
ceil(数)切り上げ
floor(数)切り捨て
round(数)四捨五入
random()0~1未満の乱数を返す。例:1~6の乱数 (int)(random()*6)+1

StringBuilder

文字列の連結

StringBuilder sb = new StringBuilder();

sb.append("aaa");
sb.append("bbb");
sb.append("ccc");

String s = sb.toString();
System.out.println(s);
append(文字列)文字列をつなげる
insert(位置, 文字列)位置に文字列を挿入
reverse()逆順にする

Scanner

文字列入力の例

Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
nextInt()整数の入力
nextLine()文字列の入力

File

ファイルの操作

File file = new File(ファイル名);
length()ファイルのサイズをlong型で返す
exists()存在するならtrue
createNewFile()ファイル新規作成
mkdir()フォルダ新規作成
delete()ファイル削除
renameTo()ファイル名変更
list()ファイル一覧取得。Stringの配列を返す。
listFiles()ファイル一覧取得。Fileの配列を返す。
getName()ファイル名を返す。
getPath()フルパスを返す。
isDirectory()フォルダならtrueを返す。
isFile()ナイルならtrueを返す。

ファイルの読み書き

書き込み

ファイルの書き込みはFileWriterクラスで行うが、効率化のためにBufferdWriterも通常は使用する。

BufferdWriter

FileWriter fw = new FileWriter("test.txt");
BufferedWriter bw = new BufferedWriter(fw);

bw.write("abc\n");
bw.close();

1行で書いた場合

BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));

bw.write("abc\n");
bw.close();

例外処理

BufferedWriter bw = null;
try {
	bw = new BufferedWriter(new FileWriter("test.txt"));

	bw.write("abc");
} catch (IOException e) {
	System.out.println(e.getMessage());
}finally {
	if( bw != null) {
		try {
			bw.close();
		} catch (IOException e) {
		}
	}
}

try with resource

try (BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"))){
	bw.write("abc");
} catch (IOException e) {
	System.out.println(e.getMessage());
}

読み込み

読み込みはFileReaderクラスで行うが、効率化のためにBufferedReaderクラスを使用する。

読み込むメソッドは readLine() で1行読み込んだ文字列を返す。nullが返されたら終了。

FileReader fr = new FileReader("data.txt");
BufferedReader br = new BufferedReader(fr);

String line;
while((line = br.readLine()) != null){
	System.out.println(line);
}

br.close();

例外処理

BufferedReader br = null;
try {
	br = new BufferedReader(new FileReader("data.txt"));

	String line;
	while((line = br.readLine()) != null){
		System.out.println(line);
	}

}catch (IOException e) {
	System.out.println(e.getMessage());
}finally {
	if( br != null ) {
		try {
			br.close();
		} catch (IOException e) {
		}
	}
}

try with resource

try(BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {

	String line;
	while((line = br.readLine()) != null){
		System.out.println(line);
	}

}catch (IOException e) {
	System.out.println(e.getMessage());
}

文字コード

FileReaderクラスの引数に Charset.forName(文字コード) で指定。

try(BufferedReader br = new BufferedReader(new FileReader("data.txt",Charset.forName("shift_jis")))) {

	String line;
	while((line = br.readLine()) != null){
		System.out.println(line);
	}

}catch (IOException e) {
	System.out.println(e.getMessage());
}

CSVファイルの読み込み

一行読み込んで分割する

try(BufferedReader br = new BufferedReader(new FileReader("data.txt",Charset.forName("shift_jis")))) {

	String line;
	boolean first = true;
	
	while((line = br.readLine()) != null){
		if( first) { // 一行目を除外
			first = false;
			continue;
		}

		// 分割
		String[] data = line.split(",");

		// ひとつずつ変数に
		int id = Integer.parseInt(data[0]);
		String name = data[1];
		int price = Integer.parseInt(data[2]);
		
		// オブジェクトに入れる
		// Shouhin s = new Shouhin(id, name, price);
		
		// リストに追加
		// list.add(s);
		
		System.out.println(name);
	}

}catch (IOException e) {
	System.out.println(e.getMessage());
}

日付

Dateクラス

//	現在日時の取得
Date d = new Date();

Calendarクラス

//	インスタンス作成
Calendar c = Calendar.getInstance();

メソッド

setTime(Date d)dをカレンダーセット
getTime()Dateで返す
set(年, 月, 日)年月日をintでセット。※月は-1した値
set(年, 月, 日, 時, 分, 秒)年月日時分秒をintでセット。※月は-1した値
get(Calendar.単位)単位(年月日など)を取得(下の表参照)。※月は-1した値
add(Calendar.単位, 量)量分の単位(年月日など)を加える(下の表参照)

Calendar.getの単位

Calendar.YEAR
Calendar.MONTH月(0~11)
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK曜日(1:日曜~7:土曜)
Calendar.HOUR
Calendar.MINUTE
Calendar.SECOND

//	インスタンス作成
Calendar c = Calendar.getInstance();

Date d = new Date();

// Dateをカレンダーにセット
c.setTime(d);

// カレンダーからDateに
Date d = c.getTime();

//	特定日時の取得
c.set(2020, 6-1, 10);	//	2020年6月10日
Date d = c.getTime();

//	日時の計算
c.add(Calendar.DAY_OF_MONTH, 3);	//	3日後
Date d = c.getTime();

//	年のみの取得
int year = c.get(Calendar.YEAR);	//	年を取得

SimpleDateFormatクラス

日付の文字列化、あるいはその逆。

//	Dateを文字列に
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String s = sdf.format(d);
yyyy4桁の年
MM
dd
HH
mm
ss
E曜日
//	文字列をDateにして表示
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
	Date d = sdf.parse("2021-09-17");
	System.out.println(d);
} catch (ParseException e) {
	System.out.println("日付形式エラー");
}

日付(java.time)

クラス

LocalDate日付を扱う
LocalTime時間を扱う
LocalDateTime日付と時間を扱う

staticメソッド

now()現在時間取得LocalDate.now()
of()数値指定LocalDate.of(2024,11,25)
parse()文字列からLocalDate.parse("2024/11/25")

メソッド

isAfter(値)値より後か?d1.isAfter(d2)
isBefore(値)値より前か?d1.isBefore(d2)
isEqual(値)値と同じか?d1.isEqual(d2)
plus単位(値)単位(Years,Months,Days,Hours,Minutes,Seconds)分足して返すd.PlusDay(5)
minus単位(値)単位(Years,Months,Days,Hours,Minutes,Seconds)分引いて返すd.MinusDay(5)
get単位()単位(Year,MonthValue,DayOfMonth,DayOfWeek,Hour,Minute,Second)取得d.getDay()
with単位()単位(Year,MonthValue,DayOfMonth,Hour,Minute,Second)設定d.getDay()
format(書式)書式で文字列化。書式はDateTimeFormatterd.format(dft)
//	現在日時の取得
LocalDate d1 = LocalDate.now();

//	特定日時
LocalDate d2 = LocalDate.of(2024,11,25);

//	文字列
LocalDate d3 = LocalDate.parse("2024-11-24");

//	5日後
LocalDate d4 = d1.plusDays(5);
System.out.println(d4);

//	文字列化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println(d1.format(dtf));

// 前後関係
if( d1.isAfter(d2)) {
	System.out.println("d1が後");
}else {
	System.out.println("d2が後");
}

差分

// 2つのLocaldateの日数差分
Period p = Period.between(d1, d4);
System.out.println(p.getDays()); // 他にもgetMonths、getYearsがある

java.sql.Dateとの変換

// java.sql.Dateへ変換
Date d = Date.valueOf(d1);
System.out.println(d);

// java.sql.Dateから変換
LocalDate d5 = d.toLocalDate(); 
System.out.println(d);

List

追加・削除可能な配列

ArrayList配列。要素の参照が速い。
LinkedListリスト。挿入・削除が速い。

生成

List<型> list = new ArrayList<型>();

Stringの例:
List<String> list = new ArrayList<String>();

右辺は型を省略可能:
List<String> list = new ArrayList<>();

追加

list.add("犬");
list.add("ねこ");
list.add("うさぎ");

取得

String s = list.get(0);	//	犬

拡張forでの利用

for(String s : list){
	System.out.println(s);
}

メソッド

add(要素)要素の追加
get(番号)その番号の要素を返す
set(番号,要素)その番号を指定要素にする
size()要素数を返す
remove(番号)その番号の要素を削除
clear()全要素を削除
isEmpty()要素が一つも無いならtrue
contains(要素)その要素があるならtrue
indexOf(要素)その要素があるなら番号を返す。無いなら-1。
addAll(コレクション)引数全要素の追加
sort(Comparator)整列
subList(開始値, 終了値)開始値から終了値-1までの新たなリストを返す。

LinkedListでのみ使用可能なメソッド

addFirst(要素)要素を最初に追加
addLast(要素)要素を最後に追加(通常のaddと同じ)
getFirst()最初の要素を返す
getLast()最後の要素を返す

Set

集合(重複しない配列)を表す。

HashSet順番不定。
TreeSet昇順に値を取り出せる。
LinkedHashSet挿入順に値を取り出せる。

生成

Set<型> list = new HashSet<型>();

Stringの例:
Set<String> list = new HashSet<String>();

メソッド

add(要素)要素の追加
size()要素数を返す
remove(要素)その要素を削除
clear()全要素を削除
isEmpty()要素が一つも無いならtrue
contains(要素)その要素があるならtrue
addAll(コレクション)全要素の追加

TreeSetでのみ使用可能なメソッド

first()最初の要素を返す
last()最後の要素を返す
ceiling(値)値以上の最初の要素を返す
floor(値)値以下の最初の要素を返す
higher(値)値より大きい最初の要素を返す
lower(値)値より小さい最初の要素を返す

Map

キーと値のペアの配列

HashMap順番不定。
TreeMapキーの昇順に値を取り出せる。
LinkedHashMap挿入順に値を取り出せる。

生成

Map<キーの型,値の型> list = new HashMap<キーの型,値の型>();

キーがString、値がIntegerの例:
Map<String,Integer> list = new HashMap<String,Integer>();

メソッド

put(キー,値)要素の追加・設定
get(キー)そのキーの要素を返す
size()要素数を返す
remove(キー)そのキーの要素を削除
clear()全要素を削除
isEmpty()要素が一つも無いならtrue
containsKey(キー)そのキーがあるならtrue
containsValue(値)その値があるならtrue
keySet()キーのSetを取得。
values()値のコレクションを取得。
entrySet()Map.Entry<キーの型,値の型>のコレクションを取得。
Map.EntryはgetKey()でキーを、getValue()で値を取り出せる。

TreeMapでのみ使用可能なメソッド

firstKey()最初のキーを返す
lastKey()最後の要素を返す
ceilingKey(値)値以上の最初のキーを返す
floorKey(値)値以下の最初のキーを返す
higherKey(値)値より大きい最初のキーを返す
lowerKey(値)値より小さい最初のキーを返す

Collection

List、Setの親インタフェース

メソッド

toArray()Objectの配列にして返す
toArray(T[] a)Tの配列にして返す

Collections

Collectionの便利なメソッド集


// 要素を全て追加
Collections.addAll(list,5,8,9,3,7);

// リストを逆順に
Collections.reverse(list);

// リストの最大値・最小値
int n = Collections.max(list);
int n = Collections.min(list);


// リストをシャッフル
Collections.shuffle(list);

// リストを昇順に整列
Collections.sort(配列);

// リストを任意の順に整列
Collections.sort(配列,Comparatorインタフェース実装);

Arrays

配列の便利なメソッド集

// 配列をリストにして返す(ただし、固定長なので追加・削除できない)
List<型> list = Arrays.asList(配列);
List<型> list = Arrays.asList(要素,要素,要素);

// 配列をListのコンストラクタに入れて作成(追加・削除可能)
List<型> list = new ArrayList<>(Arrays.asList(配列));
List<型> list = new ArrayList<>(Arrays.asList(要素,要素,要素));

// 配列を特定値で埋める
Arrays.fill(配列,値);

整列

// 配列の整列
Arrays.sort(配列);

// 配列の任意順での整列
Arrays.sort(配列,Comparatorインタフェースの実装);

// リストの整列
List<Integer> list = Arrays.asList(5,9,8,8,7);
list.sort(Comparatorインタフェースの実装);

Comparatorインタフェース実装の例

compareメソッドで引数の2つの要素を比較する。

※つまり、昇順の場合、「第一引数-第二引数」、降順の場合「第二引数-第一引数」を返すと良い

class MyComparator implements Comparator<Integer>{

	public int compare(Integer a, Integer b) {
		return a - b;	// 昇順の場合。降順なら b - a
	}

}

上記インタフェースの使用例

list.sort(new MyComparator());

System.out.println(list);

オブジェクトの場合(Shouhinクラスのtankaで整列)

class MyComparator implements Comparator<Shouhin>{

	public int compare(Shouhin a, Shouhin b) {
		return a.getTanka() - b.getTanka();
	}

}

ラムダ式を使用した場合

// 昇順
list.sort((a, b)-> a - b );

// 降順
list.sort((a, b)-> b - a );

// tankaの昇順
list.sort((a, b)-> a.getTanka() - b.getTanka() );

// tankaの降順
list.sort((a, b)-> b.getTanka() - a.getTanka() );

※ (a,b)-> a - b は引数がaとb で戻り値が a - b を表す。

ネット関係

ブラウザ起動

	URL = "http://www.yahoo.co.jp";

    try {
		Desktop desktop = Desktop.getDesktop();
		desktop.browse(new URI(url));
	} catch (Exception e) {
		e.printStackTrace();
	}