トップ «前の日記(2009-08-07) 最新 次の日記(2009-08-09)» 編集

日々の破片

著作一覧

2009-08-08

_ MessageFormatのワナ

開発したフィルターを通すと特定のパターンのタグの属性が閉じられないという問題が出る。

たとえば、<option value='>blabla</option> みたいな感じ。

属性が閉じられないって、非常にまずい感じがするので当然、さっさと修正したいのだが、さっぱりわからん。

だが、状況証拠から、問題なさそうなソースにまさに問題があることがわかった。

次のプログラムの出力を考えてみよう。

import java.text.*;
public class MF {
    public static void main(String[] args) throws Exception {
        System.out.println("hello '' !");
        System.out.println(MessageFormat.format("{0} '' !", "hello"));
    }
}

MessageFormatにそういう処理が含まれるとはまったく気づいていなかった(と書いたところでJavadoc読んだら思いだした。{0}とかを文字列内に含めるためにクォートするのに利用できるからだった)。

というわけで次の出力となる。

$ java -cp . MF
hello '' !
hello ' !

2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え