文字列の比較
- compareTo():文字列の順序を比較します。結果は以下の通りです:
- 前向き文字列が小さければ、負の整数を返します。
- 等しければ、0を返します。
- 前向き文字列が大きければ、正の整数を返します。
- compareToIgnoreCase():大文字小文字を無視して文字列を比較します。
String a = "りんご";
String b = "バナナ";
String c = "リンゴ";
System.out.println(a.compareTo(b)); // 負の整数を返します
System.out.println(a.compareToIgnoreCase(c)); // 0を返します
文字列のフォーマット
- String.format():C言語のprintf風のフォーマット指定子を使用します。
- Formatter:複雑なフォーマットを実現します。
String 名前 = "Alice";
int 年齢 = 25;
double 点数 = 95.5;
String フォーマット文字列 = String.format("名前:%s、年齢:%d、点数:%.1f", 名前, 年齢, 点数);
System.out.println(フォーマット文字列); // 出力:名前:Alice、年齢:25、点数:95.5
StringBuilder 構築者 = new StringBuilder();
try (Formatter フォーマッター = new Formatter(構築者)) {
フォーマッター.format("日時:%tF %
正規表現の応用
- matches():正規表現にマッチするかどうかを確認します。
- split():正規表現を基準に文字列を分割します。
- replaceAll() / replaceFirst():正規表現にマッチする部分を置換します。
String メール = "test@example.com";
boolean 結果 = メール.matches("^[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,}$");
System.out.println(結果); // trueを出力します
String テキスト = "Java123Python456C++";
String[] 配列 = テキスト.split("\\d+");
for (String 項目 : 配列) {
System.out.println(項目); // 出力:Java、Python、C++
}
String HTML = "<p>こんにちは <b>世界</b></p>";
String テキストのみ = HTML.replaceAll("<[^>]+>", "");
System.out.println(テキストのみ); // 出力:こんにちは 世界
文字列の構築と変換
- StringBuilder / StringBuffer:文字列を効率的に構築します。
- valueOf():基本型を文字列に変換します。
- toCharArray():文字列と文字配列を相互に変換します。
StringBuilder 構築者 = new StringBuilder();
構築者.append("Hello")
.append(" ")
.append("World");
System.out.println(構築者.toString()); // 出力:Hello World
int 数字 = 123;
String 文字列 = String.valueOf(数字); // 数字を文字列に変換します
char[] 文字配列 = {'H', 'e', 'l', 'l', 'o'};
String 文字列1 = new String(文字配列);
System.out.println(文字列1); // 出力:Hello
String 文字列2 = "World";
char[] 文字配列2 = 文字列2.toCharArray();
System.out.println(文字配列2); // 出力:W, o, r, l, d
文字列のエンコーディング
String 文字列 = "こんにちは";
try {
byte[] バイト = 文字列.getBytes("UTF-8");
String 新しい文字列 = new String(バイト, "UTF-8");
System.out.println(新しい文字列); // 出力:こんにちは
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
性能最適化
- StringBuilderの使用:文字列の連結を効率化します。
- intern():文字列をプールに登録してメモリを節約します。
// 高速な方法
StringBuilder 高速 = new StringBuilder();
for (int i = 0; i < 1000; i++) {
高速.append(i);
}
System.out.println(高速.toString()); // 出力:0123...999
// メモリ節約
String s1 = new String("hello").intern();
String s2 = "hello";
System.out.println(s1 == s2); // trueを出力します
文字列操作のツール
- Apache Commons Lang:文字列操作を簡素化します。
import org.apache.commons.lang3.StringUtils;
public class 文字列操作例 {
public static void main(String[] args) {
String 入力 = " Hello World ";
// 空白を削除
String 結果 = StringUtils.deleteWhitespace(入力);
System.out.println(結果); // 出力:HelloWorld
// 空文字列をチェック
boolean 空 = StringUtils.isEmpty(入力);
System.out.println(空); // falseを出力します
// 文字列を反転
String 反転 = StringUtils.reverse(入力);
System.out.println(反転); // 出力:dlroW olleH
}
}