Javaのcharプリミティブ型は、1文字を16ビットで表す型です。
複数のcharを組み合わせて"word"のような文字列にすることもできますし、charを1つずつ個別に扱うこともできます。
charリテラルはシングルクォートで囲みます(例:'A')。
char lowerA = 'a';
char upperB = 'B';
Stringのcharを取得するString.toCharArrayメソッドは、文字列のcharを配列として返します。
配列の回で説明したように、forループを使って配列を順に処理できます。
String text = "Hello";
char[] asArray = text.toCharArray();
for (char ch: asArray) {
System.out.println(ch);
}
// Outputs:
// H
// e
// l
// l
// o
charを調べたり操作したりするためのメソッドが、標準ライブラリにたくさん用意されています。
それらはjava.lang.Characterクラスの静的メソッドとして使うことができます。
いくつか例を見てみましょう。
Character.isWhitespace(' '); // true
Character.isWhitespace('#'); // false
Character.isLetter('a'); // true
Character.isLetter('3'); // false
Character.isDigit('6'); // true
Character.isDigit('?'); // false
charをStringに追加する+演算子を使うと、charをStringに追加できます。
'a' + " banana" // => "a banana"
"banana " + 'a' // => "banana a"
2つのcharをつないでStringを作るときに、+を_使わない_ように注意してください!
この方法で2つのcharを足し合わせると、Stringでは_なく_、intになります!
例えば:
'b' + 'c';
// => 197 (not the String "bc")
これは、Javaがcharをintに昇格させるためです(Java Language Specificationの4.2 Primitive Types and Values を参照してください)。
ただし、追加する文字が多いときは、代わりにStringBuilderを使うほうが効率的な場合があります。
StringBuilder builder = new StringBuilder();
builder.append('a');
builder.append('b');
builder.append('c');
String builtString = builder.toString();
// => abc
この演習では、エンジニアがSqueakyClean名をきれいにするための、ユーティリティルーチンの一部を実装します。
4つのタスクを通して、cleanメソッドを少しずつ作り上げていきます。
有効なSqueakyClean名は、0個以上の英字とアンダースコアで構成されます。
どのような場合でも、入力文字列はnullでないことが保証されています。なお、cleanメソッドは空文字列を有効なものとして扱う必要があります。
(静的)SqueakyClean.clean()メソッドを実装して、空白をアンダースコアに置き換えます。これは先頭と末尾の空白にも当てはまります。
SqueakyClean.clean("my Id");
// => "my___Id"
(静的)SqueakyClean.clean()メソッドを変更して、ケバブケースをキャメルケースに変換します。
SqueakyClean.clean("a-bc");
// => "aBc"
(静的)SqueakyClean.clean()メソッドを変更して、リート語を通常のテキストに変換します。
簡単のため、4、3、0、1、7をそれぞれa、e、o、l、tに置き換えるだけにします。
SqueakyClean.clean("H3ll0 W0rld");
// => "Hello_World"
SqueakyClean.clean("4 73s7");
// => "a_test"
(静的)SqueakyClean.clean()メソッドを変更して、英字以外の文字をすべて省略します。
SqueakyClean.clean("a$#.b");
// => "ab"