【Java・学習ログ13】文字列処理について

教本に沿ってやってみたシリーズ、『第15章』その１。
≪使用教材≫スッキリわかるJava入門　第3版　スッキリわかるシリーズ
## ■基本的な文字列操作

文字列の内容を調査するメソッドがStringクラスに用意されている。

#### 【調査】
| | |
|-|-|
|内容が等しいか調べる|public boolean <font color = red>equals</font>(Object o)|
|大文字、小文字を区別せず等しいか調べる|public boolean <font color = red>equalsIgnoreCase</font>(String s)|
|文字列長を調べる|public int <font color = red>length</font>()|
|空文字か（長さが0か）を調べる|public boolean <font color = red>isEmpty</font>()|

※大文字・小文字の区別のことを**文字のケース**という。

#### 【検索】
| | |
|-|-|
|一部に文字列ｓを含むかを調べる|public boolean <font color = red>contains</font>(String s)|
|文字列ｓで始まるかを調べる|public boolean <font color = red>startsWith</font>(String s)|
|文字列ｓで終わるかを調べる|public boolean <font color = red>endsWith</font>(String s)|
|文字ch（または文字列str）が最初に登場する位置を調べる|public int <font color = red>indexOf</font>(int ch)<br>public int <font color = red>indexOf</font>(Stirng str)
|文字ch（または文字列str）を後ろから検索して最初に登場する|public int <font color = red>lastIndexOf</font>(int ch)<br>public int <font color = red>lastIndexOf</font>(String str)|

#### 【切り出す】
※先頭位置は0
| | |
|-|-|
|指定位置の１文字を切り出す|public char <font color = red>charAt</font>(int index)|
|指定位置から始まる文字列を任意の長さだけ切り出す|public char <font color = red>substring</font>(int index)<br>public char <font color = red>charAt</font>(int index,int endIndex)|

#### 【変換】
| | |
|-|-|
|大文字を小文字に変換する|public String <font color = red>toLowerCase</font>()|
|小文字を大文字に変換する|public String <font color = red>toUpperCase</font>()|
|前後の空白を除去する|public String <font color = red>trim</font>()|
|文字列を置き換える|public String <font color = red>replace</font>(String before,String after)|

```java

public class Main {

	public static void main (String[] args) {
		String s1 = "スッキリJava";
		String s2 = "Java";
		String s3 = "java";
		String s4 ="Java and JavaScript";
		String s5 ="Java and programming";
		
		if (s2.equals(s3)){ //内容が等しいかを調べる
			System.out.println("s2とs3は等しい");
		}
		
		if (s2.equalsIgnoreCase(s3)){//大文字・小文字を区別しないで調べる
				System.out.println("s2とs3はケースを区別しなければ等しい");
		}
		
		System.out.println("s1の長さは" + s1.length() + "です");
		//文字列の長さを調べる
		
		if (s1.isEmpty()) { //空文字かを調べる
			System.out.println("s1は空文字です");
		}
			
		
		if(s4.contains("Java")) { //一部に文字列sを含むかを調べる
			System.out.println("文字列s4は、Javaを含んでいます");
			
		}
		if(s4.endsWith("Java")) {//文字列sで終わるかを調べる
			System.out.println("文字列s4は、Javaが末尾にあります");
		}
		System.out.println("文字列s4で最初にJavaが登場する位置は"+ s4.indexOf("Java"));
		System.out.println("文字列s4で最後にJavaが登場する位置は"+ s4.lastIndexOf("Java"));
		
		System.out.println("文字列s5の4文字目以降は"+ s5.substring(3));
		System.out.println("文字列s5で4～8文字目は"+ s5.substring(3,8));
		
	}
}

```
## 文字列の連結（concatenation）
これまでは+演算子を取り入れてきたが、**StringBuilderクラス**使用すればより高速に文字列を連携できる。

```java
public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i++){
            sb.append("Java");
        }
        String s = sb.toString(); //連携した文字列を取り出す
    }
}
```
## 正確表現の活用
「文字列の形式的な条件」を正確表現という文法を用いて指定することができる。Stringクラスの**matchesメソッド**を使えば簡単に条件を記述することができる。

▽例
・文字数が８文字
・最初の文字に数字は使えない

```java
public boolean isValidPlayerName(String name){
    return name.matches("[A-Z][A-Z0-9]{7}");
```
文字列がパターンに従った形式を満たしているかを照合する処理のことを**パターンマッチング**という。
#### 【基本文法】
+ ##### 通常の文字：その文字でなければならない

String s = "Java";
s.matches("Java"): // true
s.matches("java"): // false


+ ##### ピリオド:任意の一文字

"Java.matches("J.va")"　//２文字目は任意の文字でよい

+ ##### アスタリスク:直前の文字の0回以上の繰り返し

"Jaaaaava".matches("Ja*va")　//２文字目を0回以上繰り返し
"あかさたな001".matches(".*") //すべての文字列が任意でよい

+ ##### 波カッコ：指定回数の繰り返し
{n} 直前のn回の繰り返し

+ ##### 角カッコ：いずれかの文字
"AI[RPO]" //３文字目がRかPかO
+ ##### 角カッコ内のハイフン：指定範囲のいずれかの文字
"AI[A-Z]" 

+ ##### ハットとダラー：先頭と末尾
"^j.*p$"  先頭がj、末尾がpで長さが任意の文字列

+ ##### splitメソッド：文字列の分割
カンマとコロンの場所で文字列を分割する
String s6 = "abc,def:ghi";
		String[] words = s6.split("[,:]"); // 分割
		for (String w1 : words) {
			System.out.println(w1 + "->");

+ ##### replaceAllメソッド：文字列の置換
パターンに一致した個所を別の文字列に置換できる。
String s7 ="abc,def:ghi"; //分割
		String w2 =s7.replaceAll("[beh]","X");
		System.out.println(w2);
		
## 書式整形
+ ##### formatメソッド：書式を整える
% 修飾　桁　型

（修飾）,　…３桁ごとにカンマを入れる
       0　…空き領域を0埋め
       -　…左寄せ
       +　…符号を強制表示

（桁）表示桁数を指定する。
    n.m形式で表示した場合、全体n桁数、小数点以下m桁での表示となる

（型）
d …　整数
s …　文字列
f …　小数
b …　真偽値
<hr>
(簡易メモ)

1. Stringクラスに用意されたメソッドで文字列調査ができる。
1. matchesメソッドを用いれば形式的な条件を指定し、文字列を照合できる。
1. 文字列表示において形式を整えるにはformatメソッドを使用する.