Javaは文字列のいくつかのよくある問題を使います.

3364 ワード

今日出勤する時、ある人が使っています.以下、比較的一般的なJava文字列の問題を10つ挙げます.1.文字列をどう比較するかは「=」を使うかそれともequals()を使うか?簡単にいうと、==文字列が同じアドレスを参照するかどうかを比較し、equals()の比較値が等しいかを比較します.二つの文字列が同じオブジェクトかどうかをチェックする必要がない限り、常にequals()メソッドを使用するべきです.(1)使用==判定文字列は、以下の5つの状況に注意してください.
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true
  Javaは文字列の定数に対してバッファを提供しています.バッファ内の文字列は共有できます.
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);  // false
  コンストラクタを使って作成した文字列は全部バッファの外に新しいものを建てます.
String s1 = "abc";
String s2 = "a";
String s3 = "bc";
String s4 = s2 + s3;
System.out.println(s1 == s4); // false
  Javaにおける文字列の加算は、StringBuider類のapped()方法とtoString()方法を用いて内部的に実現されるが、String Builder類toString()方法で返される文字列は、構造関数によって作成される.
String s1 = "abc";
String s2 = "a" + "bc";
System.out.println(s1 == s2); // true
   実はここのs 2は文字列の加算を行っていません.二重引用符形式の文字列定数を加算してコンパイルすると直接に文字列「abc」に変換されます.
String str = "abc";
str.substring(3);
str.concat("123");
System.out.println(str == "abc"); // true
  文字列は定数ですので、このクラスではすべての方法で文字列の値は変更されません.可変文字列を使用したい場合は、SteringBuiderまたはStringBuffer類を使用することができます.
(2)Javaは文字列が空いているかどうかを判断する3つの方法があります.a.使う人が一番多く、直感的で便利ですが、効率が低いです.
if (str == null || str.equals(""))
b.文字列の長さを比較し、効率が高い
if (str == null || str.length() == 0)
c.Java SE 6.0から使用を開始しました.効率とbは多くないです.
if (str == null || str.isEmpty())
2. 
なぜ秘密情報を処理する時は、char[]がSteringより良いですか?
Stringは変えられない.これは、一旦Stringオブジェクトが作成されると、そのアドレスの値は自動的に掃除するためにゴミ収集器が暇になるまでそのまま維持されることを意味します.char[]を使用すると、その要素を明確に修正することができます.このようにして、秘密情報(例えばパスワード)はシステムのどこにも現れない.3.switch文でStringを分岐条件に使ってもいいですか?JDK 7から可能です.Switch条件としてString文字列を使用することができます.JDK 6の前に、Switch条件としてStringを使用することはできません.4.どのようにStringをintに変換しますか?
int n = Integer.parseInt("10");
5.空白文字で文字列を分割するにはどうすればいいですか?
正規表現を使って簡単に分割できます.「\s」は、「、」「、」「r」「n」のように、すべてのスペース記号を表します.
String[] strArray = aString.split("\\s+");
6.Substringは具体的に何をしましたか?
JDK 6では、substring()は既存の文字列char[]を表示するインターフェースを提供していますが、新しい文字列は作成されません.新しいchar[]で表される文字列を作成する必要があれば、次のように空の文字列と加算することができます.
str.substring(m, n) + "";
これは、新しい文字列を表して新しい文字列を作成します.例としては、コードをより速く実行することができます.ゴミ収集器は、未使用の大文字列を収集して、サブストリングだけを保持します.Oracle JDK 7では、既存のものを使用するよりも新しい文字数セットを作成します.7.String vs StringBuider vs StrigBurer
StringとStringBuiderの違い:StringBuilderは可変であり、これは作成後に修正できるという意味です.StrigBuilderとStrigBufferの違い:String Burerは同期しています.これはスレッドが安全であることを意味しますが、速度はStringBuiderより遅いです.(Apple Commons Lang package)の中のrepeat().
String str ="abcd";
String repeated = StringUtils.repeat(str,3); //abcdabcdabcd
9.文字列を日付に変換するにはどうすればいいですか?
String str ="Sep 17, 2013";
Date date = null;
try {
  date =new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
} catch (ParseException e) {
  e.printStackTrace();
}
System.out.println(date); // Tue Sep 17 00:00:00 CST 2013
10.どのように文字列の出現回数を統計しますか?
apacheを使用したパブリックランゲージの中のSteringUtils:
int n = StringUtils.countMatches("11112222","1");
System.out.println(n);