この記事では、Java の文字列に関する最も一般的な 10 の質問を紹介します。
1. 文字列比較には「==」を使用するべきですか?それともequals()を使用するべきですか?
簡単に言えば、「==」は、2 つの参照が同じメモリ アドレス (同じ物理オブジェクト) を参照しているかどうかを判断します。
そして、equals は 2 つの文字列の値が等しいかどうかを判断します。
2 つの文字列参照が同じオブジェクトであるかどうかを判断する場合を除き、常に equals() メソッドを使用する必要があります。
文字列インターンを理解すると、この問題をよりよく理解できるようになります。
2. 機密情報の場合、String よりも char[] を使用する方が良いのはなぜですか?
String は不変オブジェクトです。つまり、初心者が String 参照が変更されたと思っても、実際には別の (新しい) オブジェクトを指す (ポインター) 参照にすぎません。
プログラマは文字配列を明示的に変更できるため、機密情報 (パスワードなど) が他の場所に簡単に公開されることはありません (使用後に char[] を 0 に設定している限り)。
3. switch ステートメントの case 条件として文字列を使用しますか?
ちなみに、JDK7以降ではJava 6以前のバージョンでは対応していません。
次のようにコードをコピーします。
// Java 7 以降でのみ有効です。
switch (str.toLowerCase()) {
ケース「a」:
値 = 1;
壊す;
ケース "b":
値 = 2;
壊す;
}
4. 文字列を数値に変換する
非常に大きな数値の場合は Long を使用してください。コードは次のとおりです。
次のようにコードをコピーします。
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // 値が大きい可能性がある場合。
5. 文字列を空白文字で分割する方法
Stringのsplit()メソッドで受け取った文字列は正規表現として解析されます。
「/s」は、スペース「 」、タブ「/t」、改行「/n」、復帰「/r」などの空白文字を表します。
コンパイラはソース コードを解析するときにリテラルのトランスコーディングも実行するため、「//s」が必要です。
次のようにコードをコピーします。
String[] strArray = aString.split("//s+");
6. substring() メソッドは内部でどのように処理されますか?
JDK6 では、substring() メソッドは引き続き元の char[] 配列を共有し、オフセットと長さによって「新しい」文字列を構築します。
substring() で新しく作成されたオブジェクトを取得したい場合は、次のメソッドを使用します。
次のようにコードをコピーします。
文字列サブ = str.substring(開始、終了) + "";
もちろん、Java 7 では、substring() は共有するのではなく、新しい char[] 配列を作成します。
詳細については、「substring() メソッドと JDK6 と JDK7 の違い」を参照してください。
7. String 対 StringBuilder 対 StringBuffer
StringBuilder は可変であるため、作成後に内部値を変更できます。
StringBuffer は同期されるためスレッドセーフですが、効率は比較的低くなります。
8. 同じ文字列を繰り返し接続するにはどうすればよいですか?
オプション 1: Apache Commons Lang ライブラリの StringUtils ユーティリティ クラスを使用します。
次のようにコードをコピーします。
文字列 str = "abcd";
繰り返される文字列 = StringUtils.repeat(str,3);//abcdabcdabcd
オプション 2:
StringBuilder コンストラクターをより柔軟に使用します。
次のようにコードをコピーします。
文字列 src = "名前";
int len = src.length();
int 繰り返し = 5;
StringBuilder builder = new StringBuilder(len *repeat);
for(int i=0; i<repeat; i++){
builder.append(src);
}
文字列 dst = builder.toString();
9. 文字列を日付に変換するにはどうすればよいですか?
次のようにコードをコピーします。
SimpleDateFormat 形式 = new SimpleDateFormat("yyyy-MM-dd");
文字列 str = "2013-11-07";
日付 date = format.parse(str);
System.out.println(format.format(date));//2013-11-07
10. 特定の文字の出現数を数えるにはどうすればよいですか?
Apache Commons Lang ライブラリの StringUtils クラスも使用します。
次のようにコードをコピーします。
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);