[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