0
0

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

Posted at

教本に沿ってやってみたシリーズ、『第15章』その1。
≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ

■基本的な文字列操作

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

【調査】

内容が等しいか調べる public boolean equals(Object o)
大文字、小文字を区別せず等しいか調べる public boolean equalsIgnoreCase(String s)
文字列長を調べる public int length()
空文字か(長さが0か)を調べる public boolean isEmpty()

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

【検索】

一部に文字列sを含むかを調べる public boolean contains(String s)
文字列sで始まるかを調べる public boolean startsWith(String s)
文字列sで終わるかを調べる public boolean endsWith(String s)
文字ch(または文字列str)が最初に登場する位置を調べる public int indexOf(int ch)
public int indexOf(Stirng str)
文字ch(または文字列str)を後ろから検索して最初に登場する public int lastIndexOf(int ch)
public int lastIndexOf(String str)

【切り出す】

※先頭位置は0

指定位置の1文字を切り出す public char charAt(int index)
指定位置から始まる文字列を任意の長さだけ切り出す public char substring(int index)
public char charAt(int index,int endIndex)

【変換】

大文字を小文字に変換する public String toLowerCase()
小文字を大文字に変換する public String toUpperCase()
前後の空白を除去する public String trim()
文字列を置き換える public String replace(String before,String after)

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クラス使用すればより高速に文字列を連携できる。

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メソッドを使えば簡単に条件を記述することができる。

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

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")" //2文字目は任意の文字でよい

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

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

  • 波カッコ:指定回数の繰り返し

{n} 直前のn回の繰り返し

  • 角カッコ:いずれかの文字

"AI[RPO]" //3文字目が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メソッド:書式を整える

% 修飾 桁 型

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

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

(型)
d … 整数
s … 文字列
f … 小数
b … 真偽値


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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0