プログラマメモ2 - programmer no memo2

真理値表を作成するための準備 2007/05/28
2007/06/01

真理値表を作成するための準備


public class TestP {

/**
* @param args
*/
public static void main(String[] args) {
a();
}

public static void a() {

for (int b1 = 0; b1 <= 1; b1++) {
for (int b2 = 0; b2 <= 1; b2++) {
for (int b3 = 0; b3 <= 1; b3++) {
print(b1, b2, b3);
}

}

}

}

public static void print(int b1, int b2, int b3) {
System.out.printf("%-5s %-5s %-5s \n", b1 == 0 ? "F" : "T",
b2 == 0 ? "F" : "T", b3 == 0 ? "F" : "T");
}
}




結果

F T F
F T T
T F F
T F T
T T F
T T T

お気軽全角判定 2007/05/28

文字が全角かどうか判定します。お気軽です。


public static boolean isZen(String s){

for(int i=0;i<s.length();i++){
String s1 = s.substring(i, i+1);
if(URLEncoder.encode(s1).length() < 4) return false;
}

return true;
}


参考にしたのは、
http://f32.aaa.livedoor.jp/~azusa/index.php?t=js&p=formcheck

いまさらながら、asList 2007/05/26

配列からListを作成するのには、ArraysユーティリティのasListを使う。

ちなみに、Arrays.asListは内部ではnew ArrayList(o[])ですよ。

jakarta commons configuration よい子のみんなはこんなコードを書いてはいけないよだってさ。 2007/05/01

javaで、staticな操作はどこでどう影響があたえるかわからないので、注意する必要があります。

失敗談です。
jakarta commons configurationは便利なので、現在、前面的に信頼して使用しています。XMLConfigurationの動きが変だな変だなという状況になりました。なぜか、XPathを使用するモードになっているような振る舞いをしました。
はて、XPathExpressionEngineを設定していないのに何故だろうと思ったところ、下記のようなコードを記述している箇所がありました。


XPathExpressionEngine engine = new XPathExpressionEngine();

HierarchicalConfiguration.setDefaultExpressionEngine(engine);
ConfigurationFactory configurationFactory;
configurationFactory = new ConfigurationFactory();

Configuration configuration = configurationFactory.getConfiguration();


このコードだとデフォルトエンジンを変更しています。
仕方がないので、下記のように修正しました。


    // move defaultEngine
ExpressionEngine defaultEngine = HierarchicalConfiguration
.getDefaultExpressionEngine();
XPathExpressionEngine engine = new XPathExpressionEngine();

HierarchicalConfiguration.setDefaultExpressionEngine(engine);
ConfigurationFactory configurationFactory;
configurationFactory = new ConfigurationFactory();

Configuration configuration = configurationFactory.getConfiguration();

// restore defaultEngine
HierarchicalConfiguration.setDefaultExpressionEngine(defaultEngine);


なんとかしのぎましたが、このコードだと、同期化しないので潜在的にバグになっています。

正規表現を使って、xmlからXML宣言をとりのぞきたい。 2007/05/01

シナリオ:

xmlからXML宣言をとりのぞきたい。



public static String deleteXMLDeclaration(String s){
//s =s.replaceFirst("<\\?xml(.*)\\?>", "");
s =s.replaceFirst("<\\?xml((?!\\?>).)*\\?>", "");
return s;
}

phpでの正規表現 貪欲でなくなれ 2007/04/30

極論をいいますと、プログラムというのはテキストの置き換えだと思います。置き換えて置き換えて、置き換えて結果がでてくるなにかです。

phpでの正規表現パターンに使用可能な修飾子に、U (PCRE_UNGREEDY)というのがあります。
これは、

この修飾子を設定すると、量指定子の「貪欲さ」が反転します。 つまり、量指定子は、デフォルトで貪欲でなく、 疑問符を後ろに付けてはじめて貪欲になるようになります。phpマニュアル


というものです。

シナリオ:
テキストから[[]]でくくられた文字列から[[]]をとりのぞく。

を行いたいときに、


function test_clean_link2(){
$line = '[[aaaa bbbb]]cccc ddddd [[eeeee ffff]]gggg hhhh';
$pattern = <<<EOD
/\[\[
(.*)
\]\]/xU
EOD;
$line = preg_replace($pattern, '$1', $line);
echo $line;
}


結果は、
aaaa bbbbcccc ddddd eeeee ffffgggg hhhh
となります。
この結果が欲しい結果です。


もしも、このUをつけないと、
aaaa bbbb]]cccc ddddd [[eeeee ffffgggg hhhh
となります。

一番最後の]]までをマッチさせるからです。