【Java】文字列(String)の操作|調査、検索、切り出し、変換、分割、整形

Java
Toshi
Toshi
今回はJavaのStringクラスにあるメソッドの使い方をサンプルコードを交えてお伝えしていきたいと思います。

今回解説していく内容は以下です!

 本記事の内容

・Java 文字列(String)の操作|調査、検索、切り出し、変換、分割、整形
・正規表現
・関連記事


Java 文字列(String)の操作|調査、検索、切り出し、変換、分割、整形

紹介するメソッドは全19メソッドです。

分類 操作 メソッド名
調査 内容が等しいかを調べる equals
ケース(大文字、小文字)を区別せず等しいかを調べる equalslgnoreCase
文字列の長さを調べる length
空文字かを調べる isEmpty
検索 ある文字列を一部に含むか調べる contains
ある文字列で始まるかを調べる startsWith
ある文字列で終わるかを調べる endsWith
最初の登場位置を調べる indexOf
最後の登場位置を調べる lastIndexOf
正規表現を用いて照合する matches
切り出し 指定位置の1文字を切り出す charAt
指定位置から文字列を切り出す substring
変換 大文字を小文字に変換する toLowerCase
小文字を大文字に変換する toUpperCase
前後の空白を除去する trim
文字列を置換する replace
正規表現を用いて置換する replaceAll
分割 正規表現を用いて分割する split
整形 書式指定文字列を使い整形する format

では、実際の使い方についてみていきましょう!

調査

equals

操作:内容が等しいかを調べる(対象の文字列.equals(検索対象))

サンプルコード:

public class Main {
	public static void main(String[] args) {
		String st1 = "Java";
		String st2 = "JavaScript";
 
		if(st1.equals(st2)){
		   System.out.println(st1+"と"+st2+"は一緒です。");
		}else{
		   System.out.println(st1+"と"+st2+"は違います。");
		}
	}
}

実行結果:

JavaとJavaScriptは違います。

説明:

equlasメソッドは、引数に比較先となる文字列を指定することで、呼び出し元との文字列の値が一緒かどうかを比較します。

st1.equals(st2)

== の演算子で比較することも可能ですが、Stringの比較には必ずequalsを使うようにしましょう。

サンプルコード:

public class Main {
	public static void main(String[] args) {
		String st1 = "Java";
		String st2 = new String("Java");
 
		if(st1.equals(st2)){
		   System.out.println(st1+"と"+st2+"は一緒です。");
		}else{
	        System.out.println(st1+"と"+st2+"は違います。");
		}
	}
}

実行結果:

JavaとJavaは違います。

サンプルコード:

public class Main {
	public static void main(String[] args) {
		String st1 = "Java";
		String st2 = "Java";
 
		if(st1.equals(st2)){
		   System.out.println(st1+"と"+st2+"は一緒です。");
		}else{
	        System.out.println(st1+"と"+st2+"は違います。");
		}
	}
}

実行結果:

JavaとJavaは一緒です。

equalslgnoreCase

操作:ケース(大文字、小文字)を区別せず等しいかを調べる(対象の文字列.equalsIgnoreCase(検索対象))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "ABC";
		String st2 = "abc";

		if(st1.equalsIgnoreCase("abc")){
			System.out.println(st1+"はabcと一緒です。" ); 
		}
		if(st1.equalsIgnoreCase(st2)){
			System.out.println(st1+"は"+st2+"と一緒です。");
		}
          if(!st1.equals(st2)){
			System.out.println(st1+"と"+st2+"は違います。");
		}
	}
}

実行結果:

ABCはabcと一緒です。
ABCとabcは一緒です。
ABCとabcは違います。

説明:

実行結果から、大文字、小文字を区別することなく比較できていることがわかります。equalsメソッドを使ったら完全一致なので、ABCとabcは違います。という結果が返ってきました。

length

操作:文字列の長さを調べる(対象の文字列.length())

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "ABC";
		String st2 = "あいうえお";
          // 全角・半角スペースが含まれた文字列
		String st3 = "スペース も含む よ";
		
		System.out.println(st1.length());
		System.out.println(st2.length());
		System.out.println(st3.length());
	}
}

実行結果:

3
5
10

説明:

実行結果から、文字数を正確に数えられていることがわかります。
st3の結果からは全角・半角のスペース共に文字数としてカウントされていることがわかります。

isEmpty

操作:空文字か調べる(対象の文字列.isEmpty())

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String str1 = "";
		String str2 = " ";

		if (" ".isEmpty()) {
			System.out.println("空です。");
		}
		if (str1.isEmpty()) {
			System.out.println("空です。");
		}
		if (!str2.isEmpty()) {
			System.out.println("スペースが含まれています。");
		}
	}	
}

実行結果:

空です。
スペースが含まれています。

説明:

実行結果から、値が空であればtrue、値が入ってればfalseが返ってきていることがわかります。
値に全角スペースもしくは半角スペースが入っている場合は、falseを返します。

検索

contains

操作:ある文字列を一部に含むかを調べる(対象の文字列.contains(“検索対象”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
        String str1 =  "12345";
		
		System.out.println(str1.contains("1")); 
		System.out.println(str1.contains("10")); 
		
          // 半角スペースが含まれた文字列
		String str2 =  "あ い う え ";
		
		System.out.println(str2.contains(""));
		System.out.println(str2.contains(" "));
		System.out.println(str2.contains(" ")); 
	}	
}

実行結果:

true
false
true
true
false

説明:

引数の文字列が含まれていた場合はtrue、含まれていない場合はfalseを返します。実行結果から、全角スペース、半角スペースもしっかり判定できていることがわかります。

startsWith

操作:ある文字列で始まるかを調べる(対象の文字列.startsWith(“検索対象”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "JavaScript";
		String st2 = "Java";
		 
        if(st1.startsWith("j")){
            System.out.println("一致しました。");
        }else{
            System.out.println("一致しませんでした。");
        }
        if(st2.startsWith("J")){
            System.out.println("一致しました。");
        }else{
            System.out.println("一致しませんでした。");
        }
	}	
}

実行結果:

一致しませんでした。
一致しました。

説明:

実行結果から、大文字、小文字も判定していることがわかります。

endsWith

操作:ある文字列で終わるかを調べる(対象の文字列.endsWith(“検索対象”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "Java Script"; 
		String st2 = "Java";
		 
        if(st1.endsWith("a Script")){
            System.out.println("一致しました。");
        }else{
            System.out.println("一致しませんでした。");
        }
        if(st2.endsWith("")){
            System.out.println("一致しました。");
        } else {
            System.out.println("一致しませんでした。");
        }
	}	
}

実行結果:

一致しました。
一致しませんでした。

説明:

実行結果から、大文字、小文字も判定していることがわかります。

indexOf

操作:最初の登場位置を調べる(対象の文字列.indexOf(“検索対象”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		// 24文字
		String st1 = "Javaの勉強をしているけど、Javaは難しい!";
		// 14文字
		String st2 = "今日は10月4日(火)です。";
		
		String st3 = "文字列は英語でString!";
		
		System.out.println(st1.indexOf("Java"));		
		System.out.println(st2.indexOf("4日"));
		System.out.println(st2.indexOf("ストリング"));
		
	}	
}

実行結果:

0
6
-1

説明:

実行結果から、指定の文字列が出現する位置を返していることがわかります。st1、”Java”は最初に出てくるので「0」を返しておりst3、”ストリング”という文字は含まれていないので「-1」を返しています。

lastIndexOf

操作:最後の登場位置を調べる(対象の文字列.lastIndexOf(“検索対象”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		// 24文字
		String st1 = "Javaの勉強をしているけど、Javaは難しい!";
		// 14文字
		String st2 = "今日は10月4日(火)です。";
		
		String st3 = "文字列は英語でString!";
		
		System.out.println(st1.lastIndexOf("Java"));		
		System.out.println(st2.lastIndexOf("4日"));
		System.out.println(st2.lastIndexOf("ストリング"));
		
	}	
}

実行結果:

15
6
-1

説明:

indexOfと同じサンプルコードで、IndexOfをlastIndexOfに変更してみた結果がこちらです。実行結果からst1、”Java”は最後に出現した位置を返していることがわかります。

matches

操作:正規表現を用いて照合する(対象の文字列.matches(“正規表現”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
	  String st1 = "kyouha1004kadesu";
          String st2 = "abc defg";
          String st3 = "abc.defg";
	  String st4 = "abc123";
	  System.out.println(st1.matches("[a-z0-9]+"));
	  System.out.println(st2.matches("[a-z]+"));
	  System.out.println(st3.matches("[a-z]+"));
	  System.out.println(st4.matches("[a-z]+"));
	}	
}

実行結果:

true
false
false
false

説明:

実行結果から、文字列が指定した正規表現と完全に一致すると true 、一部が一致するだけの場合は false になっていることがわかります。

切り出し

charAt

操作:指定位置の1文字を切り出す(対象の文字列.charAt(指定位置))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "Java の charAtメソッド 勉強中";
		char c0 = st1.charAt(0);
		char c5 = st1.charAt(5);
		char c7 = st1.charAt(7);
		char c18 = st1.charAt(18);
		System.out.println(c0);
		System.out.println(c5);
		System.out.println(c7);
		System.out.println(c18);
	}	
}

実行結果:

J
の
c
勉

説明:

実行結果から、文字列の位置を指定し1文字ずつ取得できていることがわかります。戻り値はchar型で受け取っています。

substring

操作:指定位置から文字列を切り出す(対象の文字列.substring(開始位置,終了位置))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "JavaScript";
		System.out.println("元の文章:" + st1);
		String subst1 = st1.substring(4, 10);
		System.out.println("抜き出した文章:" + subst1);
	}	
}

実行結果:

元の文章:JavaScript
抜き出した文章:Script

説明:

指定位置から文字列を切り出せていることが実行結果からわかります。もし、”JavaScript”から”Java”だけを切り出したい場合は st1.substring(0, 4) という指定になります。

変換

toLowerCase

操作:大文字を小文字に変換する(対象の文字列.toLowerCase())

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "JavaScript";
		String st2 = "PHP";
		String st3 = "Java";
		System.out.println(st1.toLowerCase());
		System.out.println(st2.toLowerCase());
		System.out.println(st3.toLowerCase());
	}	
}

実行結果:

javascript
php
java

説明:

実行結果を見ると、全角・半角共に大文字から小文字に変換されていることがわかります。

toUpperCase

操作:小文字を大文字に変換する(対象の文字列.toUpperCase())

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "JavaScript";
		String st2 = "PHP";
		String st3 = "Java";
		System.out.println(st1.toUpperCase());
		System.out.println(st2.toUpperCase());
		System.out.println(st3.toUpperCase());
	}	
}

実行結果:

JAVASCRIPT
PHP
JAVA

説明:

toLowerCaseとは逆で、小文字を大文字に変換します。toLowerCaseと同様に全角・半角共に小文字から大文字になっていることがわかります。

trim

操作:前後の空白を除去する(対象の文字列.trim())

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		// 半角スペース
		String st1 = " A B C ";
		// 全角・半角スペース
		String st2 = " あいうえお ";
		// 半角スペース
		String st3 = "Java の勉強 ";
		
		// trim前のlength
		System.out.print("trim前の文字数 : ");
		System.out.print(st1.length()+" ");
		System.out.print(st2.length()+" ");
		System.out.print(st3.length()+" ");
		
                // 改行
		System.out.println("");
		
                // trimで空白削除
		System.out.println(st1.trim());
		System.out.println(st2.trim());
		System.out.println(st3.trim());
		
		// trim前のlength
		System.out.print("trim後の文字数 : ");
		System.out.print(st1.trim().length()+" ");
		System.out.print(st2.trim().length()+" ");
		System.out.print(st3.trim().length()+" ");
	}	
}

実行結果:

trim前の文字数 : 7 7 9 
A B C
 あいうえお
Java の勉強
trim後の文字数 : 5 6 8 

説明:

実行結果から、文字列の前後の空白が除去されていることがわかります。全角スペースは除去することができないため、注意が必要です。

replace

操作:文字列を置換する(対象の文字列.replace(“置換される文字列”, “置換する文字列”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {

		String st1 = "文字列の勉強をしています";
		String st1Replace = st1.replace("文字列", "String");
		
		System.out.println("置換前:"+st1);
		System.out.println("置換後:"+st1Replace);
		
		String st2 = "050-3090-0322";
		String st2Replace = st2.replace("-", "");

		System.out.println("置換前:"+st2);
		System.out.println("置換後:"+st2Replace);
		
		String st3 = " iPhone Android Mac Windows ";
		String st3Replace = st3.replace(" ", "");

		System.out.println("置換前:"+st3);
		System.out.println("置換後:"+st3Replace);

	}	
}

実行結果:

置換前:文字列の勉強をしています
置換後:Stringの勉強をしています
置換前:050-3090-0322
置換後:05030900322
置換前: iPhone Android Mac Windows 
置換後:iPhoneAndroidMacWindows

説明:

実行結果から、文字列が置換できていることがわかります。

replaceAll

操作:正規表現を用いて置換する(対象の文字列.replaceAll(“正規表現”, “置換する文字列”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {

		String st1 = "A b c d e F g h i j K";
		String st1ReplaceAll = st1.replaceAll("[a-z]+", "0");
		System.out.println("置換前:"+st1);
		System.out.println("置換後:"+st1ReplaceAll);
		
		String st2 = "A b c d e F g h i j K";
		String st2ReplaceAll = st2.replaceAll("[a-zA-Z]", "5");
		System.out.println("置換前:"+st2);
		System.out.println("置換後:"+st2ReplaceAll);
		
		String st3 = "1 2 3 4 5 6 7 8 9 1 0 1 1";
		String st3ReplaceAll = st3.replaceAll("[0-9]", "ab");
		System.out.println("置換前:"+st3);
		System.out.println("置換後:"+st3ReplaceAll);
		
	}	
}

実行結果:

置換前:A b c d e F g h i j K
置換後:A 0 0 0 0 F 0 0 0 0 K
置換前:A b c d e F g h i j K
置換後:5 5 5 5 5 5 5 5 5 5 5
置換前:1 2 3 4 5 6 7 8 9 1 0 1 1
置換後:ab ab ab ab ab ab ab ab ab ab ab ab ab

説明:

st2の実行結果を見てもらえるとわかる通り、大文字、小文字関係なく全てのアルファベットを数字に置換することができています。正規表現の方法はいろいろありますが、今回は[a-z]、[A-Z]、[0-9]を使用しました。

分割

split

操作:正規表現を用いて分割する(対象の文字列.split(“正規表現”))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		String st1 = "JAVA-HTML,CSS,JavaScript-PHP";
                System.out.println(st1);
		String[] nums1 = st1.split("[,-]");
		for (int i = 0; i < nums1.length; i++) {
			System.out.println(nums1[i]);
		}
	}	
}

実行結果:

JAVA-HTML,CSS,JavaScript-PHP
JAVA
HTML
CSS
JavaScript
PHP

説明:

カンマとハイフンが含まれた文字列をひとつずつ表示させてみました。

整形

format

操作:書式指定文字列を使い整形する(String.format(“書式文字列”, 値))

サンプルプログラム:

public class Main {
	public static void main(String[] args) {
		// 現在の時刻を取得
		Date a = new Date();
		System.out.println(String.format("%tY年 %tm月 %td日", a, a, a));
		System.out.println(String.format("%tH時 %tM分 %tS秒", a, a, a));
	}	
}

実行結果:

2022年 10月 05日
23時 22分 54秒

説明:

formatは使い方が難しいので、別記事で説明しようと思います。

日付/時刻の書式
書式 概要
Y 年(4桁)
m 月(01~12)
d 日(01~31)
H 時(00~23)
I 時(01~12)
M 分(00~59)
S 秒(00~59)
L ミリ秒(000~999)
D 日付(%tm/%td/%tyと同じ)
T 時刻(%tH:%tM:%tSと同じ)

正規表現

正規表現と表現例、またどんな文字列が合致するのか表を確認してみてください。

正規表現 意味 表現例 合致する文字列の例
* 0回以上繰り返し a* ␣,a,aa,aaa
+ 1回以上繰り返し ab+ ab,abab,ababab,abb
? 0回 or 1回繰り返し ba? b,ba
^ 直後の文字が行の先頭にある場合にマッチ ^Java Java Programming
$ 直前の文字が行の末尾にある場合にマッチ Programing$ Java Programming
. 改行以外の任意の1文字にマッチ . A,1
| OR条件として使用 0(7|8|9)0 070,080,090
{N} N回繰り返し (abc){3} abcabcabc
{M,N} M回以上N回以下繰り返し a{2,4} aa,aaa,aaaa
[A-Z] 英大文字A-Zの任意1文字にマッチ a[A-Z] aA,aB,aX,aY
[a-z] 英小文字a-zの任意1文字にマッチ b[a-z] ba,bc,bx,by,bz
[0-9] 数字0-9の任意1文字にマッチ c[0-9] c1,c9,c0

関連記事

【Java】環境構築「Eclipse」をインストール (Mac)
Javaの勉強ができる環境を作ろう。ということで、今回はJavaの環境構築をしていきます。※この記事は、統合開発環境ソフト「Eclipse」をインストールしてちょっと使ってみるところまでになります。

まとめ

Toshi
Toshi

いかがでしたか?サンプルコードを見ただけじゃわからないと思うので、実際に書いて動作を確認してみてください!

Toshikazu

Nagasaki→Tokyo→China→Fukuoka

1992/07/02
宮崎生まれ、長崎育ち。

2017年からブログを運営。
現在プログラマーとして福岡で働いています。

Toshikazuをフォローする
Java
シェアする
All One's Life

コメント