はじめに
学内でJavaの競技会があるらしいので、競技プログラミングで使えそうな記述をまとめておきました
参考
標準入出力
入力
基本
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Scanner クラスは標準入力を取得するのに必要
String s = sc.next(); // 文字列
int n = sc.nextInt(); // 整数
}
}
一行複数・複数行一列
どちらも同じように next()
で取れる。
// 要素数をnとする
String[] a = new Array(n);
for(int i=0; i<n; i++) a[i] = sc.next();
複数行複数(二次元)
nextLine()
で取得した行をsplit()
で分割する方法もあるが、たいていは二重ループで解決できる。
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
s[i][j] = in.next();
}
}
出力
基本
System.out.println(out);
文字列操作
結合
単にふたつの文字列を結合するのみであれば、+演算子でいい。
String s = "hoge" + "huga"; // hogehuga
破壊的変更(変数の値を書き換えること)もできる。
String s = "hoge";
s += "huga"; // hogehuga
抽出
String.substring(start, end)
を使う。
扱い方はPythonのスライスと大差ないが、インデックスにマイナスを指定することはできない。
String s = "hogehugapiyo";
System.out.println(s.substring(4, 8)); // "huga"
長さを求める
String.length()
で可能。
String s = "hoge";
System.out.println(s.length()); // 4
0文字であるかどうかを判定したい場合は、かわりにString.isEmpty()
を使うこともできる。
String s = "";
System.out.println(s.isEmpty()); // true
検索
正規表現
String.matches(format)
に正規表現を示す文字列を与えることで検索できる。
String s = "hogehugapiyo";
System.out.println(s.matches(".*huga.*")); // true
含むか
「~を含む」かどうかを調べるときにはString.contains()
が使える。
String s = "hogehugapiyo";
System.out.println(s.contains("hoge")); // true
前方検索
「~から始まる」かどうかを調べるときにはString.startsWith()
が使える。
String s = "hogehugapiyo";
System.out.println(s.startsWith("hoge")); // true
後方検索
「~で終わる」かどうかを調べるときはString.endsWith()
を使う。
String s = "hogehugapiyo";
System.out.println(s.endsWith("piyo")); // true
インデックス検索
指定した文字が最初・最後に現れる位置のインデックスを取得したい場合、String.indexOf(), String.lastIndexOf()
を使う。
このとき、基準となるのは文字列の頭の位置である点に注意。
String s = "hogehugapiyo";
System.out.println(s.indexOf("huga")); // 4
置換
置換にはString.replace(old, new)
を用いる。
old
に一致する文字列はすべてnew
に置き換えられる。
String s = "abcabcabc";
System.out.println(s.replace("a", "x")); // xbcxbcxbc
特定の文字列を削除する際も同様の方法をとる。
String s = "hogehugapiyo";
System.out.println(s.replace("huga", "")); // hogepiyo
正規表現を使いたい場合、かわりにString.replaceAll(old, new)
を使う。
String s = "abcabcabc";
System.out.println(s.replaceAll("[abc]", "x")); // xxxxxxxxx
正規表現を用いて、かつ最初に見つかった文字列を置き換える場合、String.replaceFirst(old, new)
を使う。
String s = "abcabcabc";
System.out.println(s.replaceFirst("[abc]", "x")); // xbcabcabc
分割
文字を区切って配列に格納する際はString.split(delimiter)
を用いる。こちらは区切り文字の指定が必要。
String s = "hoge huga piyo";
String[] l = s.split(" "); // ["hoge", "huga", "piyo"]
型変換
文字列→整数
Integer.parseInt()
を使う。
String s = "123";
int n = Integer.parseInt(s); // 123
整数→文字列
String.valueOf()
を使う。
int n = 123;
String s = String.valueOf(123); // "123"
比較
ほとんどの場合、比較演算子==
で解決する…が、StringやInteger型はオブジェクト型なので注意。
これらの型はequals()
で比較する。
String s = "hoge";
System.out.println(s.equals("hoge")); // true