文字列の操作
1.1 文字列処理とは
ズバリ、文字列を切り貼りします
例:1.1 「文字列を切り取る」
「こんにちは世界」という文字列の"ちは"を切り取ると「こんに世界」になります。
コードで書くと下のようなコードになります。Javaのプログラムで実行する時には下のようなコードで実行します。あくまでもサンプルなのでやり方は自分で考えて作れるようにしたいですね。
処理の内容などは、これから学んでいきます。
/**
* 文字列の操作。
*
*/
public class StringControl {
/**
* 動かしたいメソッドを呼び出してやれば動かせます。
* 例として「1.1文字列処理とは」のサンプルコードを呼び出しています。
*
* @param args
*/
public static void main(String[] args) {
StringControl main = new StringControl();
main.substringTest();
}
/**
* 「1.1.1文字列処理とは」のサンプルコード。
* 文字列を切り取る処理のサンプル<br/>
* <br/>
* <b>「こんにちは世界」という文字列の"ちは"を切り取る</b>
*/
public void substringTest() {
// 変数の初期化
String moji = "こんにちは世界";
// *******************************************************//
// * やり方1:Stringクラスのメソッド「substring()」を呼び出す *
// *******************************************************//
String rightStr = moji.substring(0, 3);
String leftStr = moji.substring(5, 7);
System.out.println("切り取った結果1は「" + rightStr + leftStr + "」です。");
// *******************************************************//
// * やり方2:char型の配列を取り出してやる *
// *******************************************************//
char[] charMoji = moji.toCharArray();
// 切り取った結果を格納する
char[] resArray = new char[charMoji.length];
int resCount = 0;
for (int i = 0; i < charMoji.length; i++) {
if (i != 3 && i != 4) {
// 表示する文字を設定(セット)する
resArray[resCount] = charMoji[i];
resCount++;
}
}
// char型の配列をStringとして生成
String resString = new String(resArray);
System.out.println("切り取った結果2は「" + resString + "」です。");
}
/**
* 「1.2.1とは」のサンプルコード。
* 文字列を調査するサンプル<br/>
* <table>
* <thead>
* <tr><th>操作</th></tr></tr>
* <th>メソッド定義(シグニチャ)</th></tr>
* </thead>
* <tbody>
* <tr><td>内容が等しいか調べる</td></tr>
* <tr><td>public boolean equals(Object o)</td></tr>
* </tbody>
* </table>
*/
public void checkString() {
String moji = "test";
// String#equals()
if (moji.equals("test")) {
System.out.println("mojiは\"test\"です。");
} else {
System.out.println("mojiは\"test\"ではありません。");
}
// String#equalsIgnoreCase()
if (moji.equalsIgnoreCase("Test")) {
System.out.println("mojiは\"Test\" or \"Test\"です。");
} else {
System.out.println("mojiは\"Test\" or \"Test\"ではありません。");
}
// String#isEmpty()
if (moji.isEmpty()) {
System.out.println("mojiは\"\"です。");
} else {
System.out.println("mojiは\"\"ではありません。");
}
}
}
1.2 基本的な文字列操作
操作 | メソッド定義(シグニチャ) |
---|---|
内容が等しいか調べる | public boolean equals(Object o) |
大文字小文字を区別せず内容が等しいか調べる | public boolean equalsIgnoreCase(String s) |
文字列長を調べる | public int length() |
空文字か調べる | public boolean isEmpty() |
Sample1 1-1 文字列調査メソッドを利用した例
※クラス全体ではなく、メソッド部分のみを記述します。
使用するメソッド一覧
String#equals()
String#equalsIgnoreCase()
String#isEmpty()
/**
* 文字列調査(文字列が等しいか?)のサンプル。
* 「リスト1-1 文字列調査メソッドを利用した例」
*/
public void sample1_1StringEquals() {
// 文字列を比較した場合
System.out.println("*** String#equals() Sample1 ****");
if ("test".equals("tezt")) {
System.out.println("\"test\"と\"tezt\"は等しいです。");
} else if ("test".equals("tezt") == false) {
System.out.println("\"test\"と\"tezt\"は等しくありません。");
} else {
// 実際は例外しか返ってこないので意味のないコード
// 想定外のケースも考慮に入れる
System.out.println("trueもfalseも帰ってこなかった場合。");
}
System.out.println("*** String#equals() Sample2 ****");
// 変数に入れた文字列を比較した場合
String str = "test";
String str2 = "tezt";
if (str.equals(str2)) {
System.out.println("\"test\"と\"tezt\"は等しいです。");
} else {
System.out.println("\"test\"と\"tezt\"は等しくありません。");
}
System.out.println("*** String#equalsIgnoreCase() Sample1 ****");
if ("test".equalsIgnoreCase("tezt")) {
System.out.println("\"test\"と\"tezt\"は等しいです。");
} else if ("test".equalsIgnoreCase("tezt") == false) {
System.out.println("\"test\"と\"tezt\"は等しくありません。");
} else if ("test".equalsIgnoreCase("Test")) {
System.out.println("\"test\"と\"Test\"は等しいです。");
} else {
// 実際は例外しか返ってこないので意味のないコード
// 想定外のケースも考慮に入れる
System.out.println("trueもfalseも帰ってこなかった場合。");
}
System.out.println("*** String#isEmpty() Sample1 ****");
if ("".isEmpty()) {
System.out.println("文字列は空です。");
}
String tmp = null;
System.out.println("*** String#isEmpty() Sample2 ****");
try {
if (tmp.isEmpty()) {
System.out.println("文字列はNULLです。");
}
} catch (NullPointerException e) {
System.out.println("実行するとNullPoineterExceptionで落ちる。");
}
}
Sample1: 文字列の調査メソッドの解説
は、"test"と"tezt"を比較している2つの文字列が等しいならifの中に処理が進む"test".equals("tezt")
は2つの文字列を比較した時の返り値がfalseの場合ifの中に処理が進む"test".equals("tezt") == false
は変数「str」と「str2」を比較した時の返り値がtrueの場合ifの中に処理が進むstr.equals(str2)
は下の内容の処理を行っているので「大文字小文字の区別無し」で文字列の比較した時の返り値がtrueの場合ifの中に処理が進む ※Stringクラスのソースファイル参照"test".equalsIgnoreCase("tezt") == false
public boolean equalsIgnoreCase(String anotherString) { return (this == anotherString) ? true : (anotherString != null) && (anotherString.value.length == value.length) && regionMatches(true, 0, anotherString, 0, value.length); }
は"test"と"Test"を比較した時の返り値がtrueの場合ifの中に処理が進む"test".equalsIgnoreCase("Test")
は""が空文字だった場合ifの中に処理が進む"".isEmpty()
にNULLを代入している、この変数を参照するとNullPointerExceptionで落ちるString tmp = null;
<code>は変数</code>
tmp
- try { 何かの処理 } catch ( キャッチする例外 ) { 例外時の処理 }で例外が起きた時の処理を行う。
Sample2 1-2 文字列検索メソッドを利用した例
※クラス全体ではなく、メソッド部分のみを記述します。
使用メソッド一覧
String#contains()
String#endsWith()
String#indexOf()
/**
* 文字列調査(文字列が等しいか?)のサンプル。
* 「リスト1-2 文字列検索メソッドを利用した例」
*/
public void sample1_2StringSearch() {
String str = "0123456789ABCABC";
System.out.println("*** String#contains() Sample1 ****");
if (str.contains("012")) {
System.out.println(str + "は「012」を含んでいます。");
}
System.out.println("*** String#contains() Sample1 ****");
if (str.contains("014")) {
System.out.println(str + "は「014」を含んでいます。");
} else {
System.out.println(str + "は「014」を含んでいません。");
}
System.out.println("*** String#endsWith() Sample1 ****");
if (str.endsWith("ABC")) {
System.out.println(str + "は「ABC」を末尾にあります。");
}
System.out.println("*** String#endsWith() Sample1 ****");
System.out.println(str + "は「ABC」の文字列が" + str.indexOf("ABC") + "番目に出現します。");
System.out.println(str + "は「ABC」の文字列が最後に出現するのは" + str.lastIndexOf("ABC") + "番目に出現します。");
}
文字列検索メソッドの解説
で文字列strに"012"が含まれているか検証しています。含まれているならばtrueを返します。そうでない場合はfalseを返すstr.contains("012")
で文字列strの末尾に"ABC"があるか検証しています。末尾にあればtrue, なければfalseを返す。str.endsWith("ABC")
で文字列str内の"ABC"がはじめに出現する位置(int型)を返します。str.indexOf("ABC")
で文字列str内の"ABC"が最後に出現する位置(int型)を返します。str.indexOf("ABC")
正規表現を使う
上に記載したもの以外にも、よく使うメソッドを紹介します。
String#matchies()です。
このメソッドは、引数に正規表現を渡して、その正規表現にマッチするならtrue, そうでないならfalseを返します。
正規表現は後々に学習します。とりあえずは下の「数字」とaからz、AからZまでの文字にマッチするケースです。
チェック処理なので、静的メソッドにしています。
public static boolean isNumber(String numberStr) {
// numberStr0から9のうちどれかに該当するか判定します。(1文字だけ)
if (numberStr.matches("[0-9]")) {
return true;
}
return false;
}
上の処理は、numberStrが数字1文字で、0から9に該当するかどうかの判定を行なっています。
文字数を複数にする場合は後ろに、「{2,5}」のようにつけると「2桁から5桁の間の0から9の数字」というような意味になります。
関連ページ
- Java はじめて 1 〜メインメソッド〜
- Java はじめて2 〜メソッドを呼び出す〜
- Java はじめて3 〜コメントの書き方〜
- Java はじめて4〜練習問題をやってみる〜
- Java はじめて5 〜変数について〜
- Java はじめて6 〜変数について2、byte, char, boolean型〜
- Java はじめて7 〜配列とは、配列の使い方〜
- Java はじめて8 〜booleanとif~
- Java はじめて 9 〜switch文〜
- Java はじめて 10 〜ループ処理A: for文1〜
- Java はじめて 11 〜ループ処理A: for文2 拡張for文〜
- Java はじめて12 〜ループ処理B: while文〜
- Java はじめて13 〜ループ処理C: do-while文〜
- Java はじめて14 〜クラスの作り方〜
- Java はじめて15 〜クラス型変数の使い方〜
- Java はじめて16 〜クラス設計から実装〜
- Java はじめて17 〜設計後の部品を実装する1〜
- Java はじめて18 〜設計後の部品を実装する2〜
- Java はじめて19 〜コンストラクタの役割を見る〜
- Java はじめて20 〜チェック処理クラスを作る〜
- Java はじめて21 〜オブジェクト指向的分析、アプリの拡張をする〜
- Java はじめて22 〜オブジェクト指向的分析、アプリ拡張の実装とテスト〜
- Java はじめて23 〜テスト駆動型開発を行う〜
- Java はじめて24 〜JUnitでのテスト駆動型開発1〜
- Java はじめて25 〜JUnitでのテスト駆動型開発2: テストケース作成〜
- Java はじめて26 〜JUnitでのテスト駆動型開発3: クラスの実装〜
- Java はじめて27 〜JUnitでのテスト駆動型開発4: 追加修正と実装〜
- Java はじめて28 〜JUnitでのテスト駆動型開発5: ファイル出力の実装〜
- Java はじめて29 〜JUnitでのテスト駆動型開発6: ファイル読み込みのテスト〜
- Java はじめて30 〜JUnitでのテスト駆動型開発7: テストクラスの実装方法〜
- Java はじめて31 〜JUnitでのテスト駆動型開発8: 処理をつなげたテスト〜