Javaの文字列操作:高度な手法と実践例

文字列の比較

  • 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
    }
}

タグ: Java 文字列比較 フォーマット 正規表現 stringbuilder

7月27日 01:59 投稿