夏休みに入ってから、すごい久しぶりにバイトの関係でJavaやってます。Web作るバイトなんだけど俺がJavaでやりたいからJavaでやるんだっっという感じで。

文字列処理系をいっぱいやった。以下メモ。



*StringTokenizer(CSVファイルを読むのに使える)

-java.util.StringTokenizer(http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/StringTokenizer.html)

-@IT:Java TIPS−JavaでCSV形式のファイルを読み書きする(http://www.atmarkit.co.jp/fjava/javatips/063java003.html)

>>

StringTokenizer st = new StringTokenizer(str, “,”); // 文字列strを , で分割

while(st.hasMoreTokens()){ // 分割したトークンがまだあるなら

System.out.println(st.nextToken()); // 次のトークン表示(1つ進む)

} // トークンがある限りループ

<<

*regex(正規表現)

-java.util.regex(http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/package-summary.html)

– ok24.jp – 技術ドキュメント Java:正規表現(java.util.regex)(http://www.ok24.jp/tech/java_regex.html)

-JavaでHello World 正規表現編(http://www.hellohiro.com/regex.htm)

-Merlinの魔術: 新しいregexライブラリーによる文字シーケンスの解析(http://www-6.ibm.com/jp/developerworks/java/021108/j_j-mer0827.html)

全然わかんないので↓の関数を見つけてきて使い廻した。

>>

// 正規表現で、String中からpatternにマッチする文字列を全てregexに置き換える関数

public static String regReplaceAll(String s, String p, String r) {

Pattern pattern = Pattern.compile(p);

Matcher matcher = pattern.matcher(s);

return matcher.replaceAll(r);

}

<<

*OutputStream(ファイル入出力)

-java.io.OutputStream(http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/OutputStream.html)

今までCのファイルディスクリプタとかに頼ってたので初めて使ってみた。

>>

// 文字列strをfileNameというファイル名で保存する関数

fout(String str, String fileName){

try{

FileOutputStream fout = new FileOutputStream(fileName); // fileNameに出力する出力ストリームを作る

fout.write(xml.getBytes()); // 書く

fout.close(); // 一応閉じる

}

catch (Exception e) {

System.out.println(“Exception : ” + e);

}

finally{

System.out.println(“ファイル出力完了 : ” + fileName);

}

}

<<

*TreeSet(データをたくさん持ったり並び替えたりする)

-java.util.TreeSet(http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/TreeSet.html)

-JavaでHello World コレクション(Set)編(http://www.hellohiro.com/set.htm)

TreeSetは自分で要素のソートルールを設定できる木構造。要素の中の属性を比較して並び替える事ができる。

要素を入れる時に同時に入れるキーによって並び替える事ができるMapや、そんなもん関係なくただデータ溜めるだけのListなんかもあるけど今回はSetで。

並び替えを定義するには、ComparatorかComparableを使う。

*Comparator

-java.util.Comparator(http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Comparator.html)

-神戸大学工学部情報知能工学科 情報知能工学演習IV Comparator interface(http://www.edu.cs.kobe-u.ac.jp/Enshu4/textK/api_interface2.html)

Comparatorインタフェースを継承し、比較専用の実装クラス(とりあえずMyComparatorクラスとする)を作る。神戸大学のページがまんま。

作ったMyComparatorクラスを、TreeSetのコンストラクタで読めば良いらしい。

>>

Collection ts = new TreeSet(MyComparator); // 新しいTreeSetを作ってMyComparatorもセットする

<<

これで並び替えルールが定義されるとかなんとか。

*Comparable

-java.lang.Comparable(http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Comparable.html)

-じゃばじゃば – Comparable(http://www.asahi-net.or.jp/~dp8t-asm/java/tips/Comparable.html)

-TECHSCORE – Set(http://www.techscore.com/tech/Java/Utility/3.html)

-任意団体PoisonSoft – Sort(http://www5b.biglobe.ne.jp/~psoft/lesson/sort.html)

並び替えされる要素にComparableインタフェースをimplementsし、

public int Comparable.compareTo(Object)をオーバーライドして比較ルールを定義し直す。

>>

// Comparable interfaceからオーバーライドした関数

public int compareTo(Object obj){

return this.id – obj.id;

}

<<

一応俺も辞書の単語クラスを作って試してみた(http://shokai.org/archive/java/Word.java)

このままTreeSet.add(Word)すれば、Word.jpName(日本語での単語名)を比較してあいうえお順に並び替えてくれる。

こんなノリでExcel等で管理してる商品リストからHTMLとXMLを吐くシステムを作ってみた。

HTMLはテンプレートファイルを作っておいて、とかとかタグを入れておくとその商品の名前や値段に置き換わるような感じにしたんだけど

結局Flashからxml読んだ方が楽な事に気付いた。HTMLめんどい。俺の中でHTML書く時代は終わった。