教本に沿ってやってみたシリーズ、『第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文字目は任意の文字でよい
"Jaaaaava".matches("Java") //2文字目を0回以上繰り返し
"あかさたな001".matches(".") //すべての文字列が任意でよい
{n} 直前のn回の繰り返し
"AI[RPO]" //3文字目がRかPかO
"AI[A-Z]"
"^j.*p$" 先頭がj、末尾がpで長さが任意の文字列
カンマとコロンの場所で文字列を分割する
String s6 = "abc,def:ghi";
String[] words = s6.split("[,:]"); // 分割
for (String w1 : words) {
System.out.println(w1 + "->");
パターンに一致した個所を別の文字列に置換できる。
String s7 ="abc,def:ghi"; //分割
String w2 =s7.replaceAll("[beh]","X");
System.out.println(w2);
書式整形
% 修飾 桁 型
(修飾), …3桁ごとにカンマを入れる
0 …空き領域を0埋め
- …左寄せ
+ …符号を強制表示
(桁)表示桁数を指定する。
n.m形式で表示した場合、全体n桁数、小数点以下m桁での表示となる
(型)
d … 整数
s … 文字列
f … 小数
b … 真偽値
(簡易メモ)
- Stringクラスに用意されたメソッドで文字列調査ができる。
- matchesメソッドを用いれば形式的な条件を指定し、文字列を照合できる。
- 文字列表示において形式を整えるにはformatメソッドを使用する.