目次
わかりやすいJava_オブジェクト指向編を読んで勉強中。。
String#indexOf
文字の位置を取得する
String s = "foobar2000";
System.out.println(s.indexOf('o'));
System.out.println(s.indexOf('o', 2));
System.out.println(s.indexOf('o', 3));
System.out.println(s.indexOf("oo"));
System.out.println(s.indexOf("oo", 2));
System.out.println(s.indexOf("oo", 3));
結果
1
2
-1
1
-1
-1
一致する文字/文字列が見つからない場合は -1
が返ってくる。
String#substring
String test = "testString";
System.out.println(test.substring(4));
System.out.println(test.substring(4, 8));
try {
System.out.println(test.substring(100));
} catch (Exception e) {
e.printStackTrace();
}
結果
String
Stri
java.lang.StringIndexOutOfBoundsException: String index out of range: -90
at java.lang.String.substring(String.java:1958)
at java.lang.String.substring(String.java:1925)
at jp.fernweh.main.StudyJava.main(StudyJava.java:22)
引数が2つの場合は、どっちも文字の位置を入れる。2つ目の引数は 文字の長さではない。
文字列結合
String
を+
で結合するとパフォーマンス的にどうこうとか解説してるサイトがあるけど、ループ内とかで実行するのでなければコンパイラが最適化してくれるっぽい(StringBuilder
で連結するように勝手にしてくれるらしい)。StringBuffer
,StringBuilder
は可変長文字列を扱うクラス。StringBuffer
は同期、StringBuilder
は非同期実行される。
スレッドセーフな可変長文字列を使いたい場合は StringBuffer
を使用する。
まぁ特別速さが求められるものでなければ StringBuffer
を使っておけばいい気がする。
String s;
s = "foo".concat("bar").concat("2000");
System.out.println(s);
int capacity = 5;
StringBuffer sb = new StringBuffer(capacity);
sb.append('X');
sb.append(true);
s = sb.toString();
System.out.println(s);
sb.append("hogehoge");
System.out.println(sb);
結果
foobar2000
Xtrue
Xtruehogehoge
String#toUpperCase, String#toLowerCase
String s = "HOGEpiyo";
System.out.println(s.toUpperCase());
System.out.println(s.toLowerCase());
結果
HOGEPIYO
hogepiyo
String#trim
String s = " \f \r\n HOGE \n piyo \t ";
System.out.println(s.trim());
結果
HOGE
piyo
文字列両端の空白を取り除く。 空白(半角スペース)だけじゃない。 両端ではなく片方だけとかは正規表現で実装しないとダメみたい。
String#replace
String s = "foo";
s = s.replace("foo", "bar");
System.out.println(s + "!");
s = s.replace("", "-");
System.out.println(s);
結果
bar!
-b-a-r-
文字列の比較
String s1, s2;
s1 = "Fernweh8000";
s2 = "Fernweh8000";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println();
s2 = new String(s1);
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println();
結果
true
true
false
true
ほかにも compareTo
だとか比較メソッドが存在する。
フォーマット文字列
- Java書式付き出力メモ(Hishidama's Java Formatter/Formattable Memo)
[Java 5]C言語からの移植に便利なprintfの注意点 - @IT
System.out.printf("%-20d", 123456789); System.out.printf("%s%n%s%n", "←に空白があるよ", "%n は環境依存の改行文字を出力するよ"); System.out.printf("%0+,(8d %n", 12345); System.out.printf("%0+,(12d %n", -34567); System.out.printf("%0+,8d %n", -56789); System.out.printf("%c %n", 'a' + 1); System.out.printf("%f %.1f", 12.34, 56.789);
結果
123456789 ←に空白があるよ
%n は環境依存の改行文字を出力するよ
+012,345
(000034,567)
-056,789
b
12.340000 56.8
CharSequence
インターフェイス
String
や StringBuilfer
などの char
文字列を扱うことのできるクラスが実装しているインターフェイス
charAt
, subSequence
, length
メソッドを持つ