LoginSignup
0
1

Javaでよくやる文字列操作

Posted at

思いついたものがあったら追記します。

環境

JDK 17

参考資料

StringクラスのJavadoc

部分文字列を取得する

終了インデックスの文字は含まれないことに注意。

String source = "abcdefghijk";
// 開始インデックス(=0始まり)のみ指定。開始インデックスの文字は含まれる
String sub1 = source.substring(3);
System.out.println(sub1);
// 開始インデックス(=0始まり)と終了インデックスを指定。
// 開始インデックスの文字は含まれる。終了インデックスの文字は含まれない。
String sub2 = source.substring(3, 6);
System.out.println(sub2);
実行結果
defghijk
def

CSV文字列を分割する(囲み文字無し)

コード
String source  = "aaa,bbb,ccc";
String[] result = source.split(",");
for (String s : result) {
    System.out.println(s);
}
実行結果
aaa
bbb
ccc

CSV文字列を分割する(囲み文字あり)

'aaa','bbb','ccc'からaaabbbcccが欲しい場合。

一番最初と最後の'を削除してから、','で分割するのがポイントです。

コード
String source  = "'aaa','bbb','ccc'";
// 最初と最後の'を取り除く
String substring = source.substring(1, source.length() - 1);
// ','で分割する
String[] result = substring.split("','");
for (String s : result) {
    System.out.println(s);
}
実行結果
aaa
bbb
ccc

結合してCSV文字列を作成する(囲み文字無し)

配列で指定
String[] source = {"aaa", "bbb", "ccc"};
String result = String.join(",", source);
System.out.println(result);
可変長引数で指定
String result = String.join(",", "aaa", "bbb", "ccc");
System.out.println(result);
Listで指定
List<String> source = List.of("aaa", "bbb", "ccc");
String result = String.join(",", source);
System.out.println(result);
Stream_APIを利用
List<String> source = List.of("aaa", "bbb", "ccc");
String result = source.stream()
    .collect(Collectors.joining(","));
System.out.println(result);
実行結果(全て同じ)
aaa,bbb,ccc

結合してCSV文字列を作成する(囲み文字あり)

List<String> source = List.of("aaa", "bbb", "ccc");
String result = source.stream()
    // 「区切り文字,最初の文字,最後の文字」の順に指定
    .collect(Collectors.joining("','", "'", "'"));
System.out.println(result);
実行結果
'aaa','bbb','ccc'

文字列の置換

String source = "おいしいいちごをたべたい";
String result = source.replace("い", "あ");
// 元の文字列は変更されないことに注意
System.out.println(source);
System.out.println(result);
実行結果
おいしいいちごをたべたい
おあしああちごをたべたあ

似たメソッドでreplaceAll()replaceFirst()というものがあります。これらは置換対象を正規表現で指定します。対して👆のreplace()は単純な文字列一致で置換対象を指定します。

変数の埋め込み

%dは整数、%sは文字列です。

String source = """
    本日の気温は%d度です。
    これは%sです。
    """;
int temperature = 30;
String expression = "夏日";
String result = source.formatted(temperature, expression);
System.out.println(result);
実行結果
本日の気温は30度です。
これは真夏日です。
  • String.format(source, temperature, expression)でも全く同じことができます。しかし、Java 15で導入された.formatted()メソッドの方が読みやすいので、最近のJavaではこちらをよく使います。
  • Java 21では変数を直接埋め込むことができるようになるみたいです(JEP 430)。

文字コード変換(UTF-8 -> Shift-JIS)

TBD

文字コード変換(Shift-JIS -> UTF-8)

TBD

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1