【独学】はじめてのAndroidプログラミング – 4.4 Java言語の基礎(文字列と正規表現)

Java言語の文字列 (Stringオブジェクト)、文字列とバイト列の変換、正規表現マッチングと置換について学習します。

カリキュラムのサンプル コードは、「Javaコードの実行」に示す手順で実行して確認できます。

文字列 (Stringオブジェクト )

文字列は Stringオブジェクトで扱います。Stringオブジェクトはクラス型変数で、内部に文字列を保持し、それを操作するためのメソッドを提供します。

  • Stringはnew演算子を使う必要がなく、文字列を代入可能。
  • 文字列の比較では、数値の比較は「==」で可能だが、文字列はオブジェクトため、同じ内容の文字列 (同値) でも同一とは限らない。文字列は「==」で比較せずに「equals」メソッド(=オブジェクトに属する処理や操作のこと)を使用する。
  • 「length」メソッドは、保持している文字列の文字数を戻り値として返す。
  • 「valueOf」メソッドは、引数に受け取ったint型の値をStringに変換して戻り値として返す。
  • 「substring」メソッドは、そのインスタンス(=メインメモリ上に展開して処理・実行できる状態にしたもの)が保持する文字列から、一部分を切り取って新たな文字列にして戻り値として返す。文字列の並びを「0」から始まるインデックスを用いて割り当て、「substring」メソッドの最初のパラメータが開始インデックス(この位置にある文字は含まれる)、次のパラメータが終了インデックス(この位置にある文字は含まれない)になり、文字列が切り取られる。
String s = "あいうえお";
String s1 = "あいおうえ";
int i = 20;

System.out.println(s.equals(s1));      // false
System.out.println( s.length());       // 5
System.out.println(String.valueOf(i)); // 20
System.out.println( s.substring(1,4)); // いうえ

正規表現マッチングと置換

正規表現とは文字列のパターンを一つの形式でまとめて表現するために使用し、文字列から特定のパターンを検索して、一致する文字列が存在するかをチェックします。

※なおこの節については、難易度が高いため、余力のある方はご覧下さい

主な正規表現の記号と意味について次に示します。

記号記号の説明例の説明
.任意の1文字。改行文字は除く.+任意の文字列
*直前の1文字の0回以上の繰り返しと一致hoge*hogeもしくはhogee…と一致
^行の先頭^[0-9]行頭が数字
$行の末尾.{10}$10文字の行
[ ]カッコ内の任意の1文字と一致。「-」で範囲指定可[a-z]小文字のアルファベット1文字と一致
[^ ]カッコ内の任意の1文字と不一致。「-」で範囲指定可[^A-Z]大文字のアルファベット以外
+直前の文字の1個以上の繰り返しと一致hoge+hogee…と一致
?直前の文字が0個または1個の場合に一致hoge?hogeもしくはhogと一致
{ }カッコ内の数値の繰り返しと一致{n}直前の文字のn個の繰り返しと一致
同上{,n}直前の文字のn個以下の繰り返しと一致
同上{m,}直前の文字のm個以上の繰り返しと一致
同上{m,n}直前の文字のm個以上、n個以下の繰り返しと一致
|直前、直後どちらかのパターンに一致hoge|piyohogeまたはpiyo
( )カッコ内をグループ化。マッチした内容は参照可

正規表現の処理を行うためには、import文を使って、PatternクラスとMatcherクラスを呼び出します。

Matcher クラスの find メソッドは、対象の文字列の中でパターンとマッチする部分があるかを検索します

import java.util.regex.Pattern;
import java.util.regex.Matcher;

// 正規表現マッチング
Pattern pat = Pattern.compile("aa");
Matcher matcher = pat.matcher("ababaabbb");
System.out.println(matcher.find()); // => true

正規表現を用いた置換のために「Matcher」オブジェクトの「replaceAll」メソッドと「replaceFirst」メソッドを利用します。「replaceAll」メソッドではマッチする箇所全てを置換します。一方、「replaceFirst」メソッドではマッチした最初の箇所だけを置換します。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

Pattern pat = Pattern.compile("aa");

// 置換
Matcher matcher2 = pat.matcher("[aa]ccc[aa]");
StringBuffer sb = new StringBuffer();
while (matcher2.find()) matcher2.appendReplacement(sb, "bb");
matcher2.appendTail(sb);
System.out.println(sb.toString()); // => [bb]ccc[bb]

// より簡単な方法としては replaceAll メソッドを使用する
Matcher matcher3 = pat.matcher("[aa]ccc[aa]");
System.out.println(matcher3.replaceAll("bb")); // => [bb]ccc[bb]

本節の説明は以上になります。

タイトルとURLをコピーしました