[1] 数値 null をString.valueOfで文字列変換した場合、nullにならない
* 数値 null をString.valueOfで文字列変換した場合、 null にならずに、文字列で "null" になる
サンプル
public class SampleCode { public static void main(String[] args) { Integer value = null; String valueString = String.valueOf(value); if (valueString == null) { System.out.println("null"); } else { System.out.println("not null : " + valueString); } } }
出力結果
not null : null
[2] ドット「.」を区切りにする場合、「.」だけでは、分割できない
* 以下の「サンプル : 修正前」を実行してみると、 ドット「.」を区切りで分割されず、「Done」とだけ表示される
サンプル : 修正前
* 実行してみると「Done」とだけ表示されるpublic class Main { public static void main(String[] args) { String ipv4 = new String("127.0.0.1"); // ★この部分に問題あり★ String[] results = ipv4.split("."); for (String result : results) { System.out.println("Result : " + result); } System.out.println("Done"); } }
サンプル : 修正後
// ★この部分を修正「split(".");」⇒「split("\\.");」★ String[] results = ipv4.split("\\.");
出力結果
Result : 127 Result : 0 Result : 0 Result : 1 Done
[3] 正規表現で意図したとおり動かない
* 以下のように正規表現「[E001]\nFailed because the value (.*) is invalid.」を使って 検索しても、意図したとおり動かない。 => 正規表現の文字をエスケープする必要がある
サンプル : 修正前
* 出力結果は「not match」public class Main { public static void main(String[] args) { String target = "[E001]\nFailed because the value (aaa) is invalid."; String regularExpression = "[E001]\nFailed because the value (.*) is invalid."; if (target.matches(regularExpression)) { System.out.println("match"); } else { System.out.println("not match"); } } }
サンプル : 修正後
* 出力結果は「match」// ★この部分を修正「[E001]」⇒「\\[E001\\]」★ String regularExpression = "\\[E001\\]\nFailed because the value (.*) is invalid.";
関連記事
* 正規表現http://blogs.yahoo.co.jp/dk521123/33605882.html
関連記事
プログラムバグのパターン
http://blogs.yahoo.co.jp/dk521123/22609164.htmlJavaの文字列の扱い
* [2] に関連http://blogs.yahoo.co.jp/dk521123/13687446.html