2010-01-01から1年間の記事一覧

ArrayComparator

import java.util.Comparator; /** * 配列の比較に使用するComparator。 * * @param <V> */ public class ArrayComparator<V> implements Comparator<V[]> { // 比較する要素の優先順位 private int[] priority; // すべての要素の比較に使用するComparator private Com</v[]></v></v>…

Collections

使い勝手や使い道は聞かないで。 面白そうだから作ってみただけ。 public interface Executer<V> { public V execute(int index, Object... objects) throws Exception; } import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; </v>…

JdbcDriverClassLoader

import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.net.URL; import java.net.URLClassLoader; import java.net.URLStreamHandlerFactory; import java.util.Array…

CaseInsensitiveMap

これもあちこちで書いているクラス。 まあcommonsプロジェクトに同様のクラスがあるのだけども・・・ import java.util.HashMap; import java.util.Map; public class CaseInsensitiveMap<V> extends HashMap<String, V> { public CaseInsensitiveMap() { } public CaseIns</string,></v>…

CharsetResourceBundleControl

ユーティリティ系メソッドのネタが尽きたので、今回からはユーティリティ系クラス。 できるだけ単体で使用できる形で書いていく。javaコアAPIで使用する一般的な設定ファイルはpropertiesという拡張子で作成する。 読み込む時にはResourceBundleというクラス…

indexAny

文字列の中から複数のcharのうち、最初に出現する位置を返す。 実際の使いどころはというと、位置を知りたいのではなく、単に文字列の中にあるかどうかを知りたいだけだったりする。 public static int indexAny(String text, char[] ca) { int ret = -1; fo…

countChar

文字の数を数える。 csvの処理で引用符の数を数えるのに使った。 public static int countChar(String text, char c) { if (text == null) { return 0; } int ret = 0; for (int i = 0; i < text.length(); i++) { if (text.charAt(i) == c) { ret++; } } re…

dateDiff

2つの日付の間隔を取得する。 public static long dateDiff(Date d1, Date d2, int field) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); switch (field) { case Calendar.YEAR: return …

convertDateFormat

おそらく今まで作ってきたシステムのほとんどで繰り返し書いてるメソッド。 効率化のためSimpleDateFormatのインスタンスをstatic変数にしてて失敗したこともあった。 このクラスってスレッドセーフじゃないんだよね・・・ public static String convertDate…

repeat

一つの文字を指定数続けた文字列を返す。 public static String repeat(char c, int count) { char[] ret = new char[count]; Arrays.fill(ret, c); return String.valueOf(ret); }

leftBytes

文字から指定したバイト数の文字を切り出す。 マルチバイト文字の途中のバイトでは切らない。System.out.println(leftBytes("あいうえお", 3)); => "あ" public static String leftBytes(String text, int bytes) { // file.encodingというプロパティは環境…

arrayIndexOf

配列内のオブジェクトの位置を返す。 Arrays#binarySearchはソートしないと使えない。 なんでかね? public static int arrayIndexOf(Object array, Object object) { int arrayLength = Array.getLength(array); for (int i = 0; i < arrayLength; i++) { O…

asList

Arrays#asList()はプリミティブの配列は配列として扱わず、1つのオブジェクトとして処理されてしまうのでその代用。 public static List asList(Object array) { if (array == null) { return null; } if (array instanceof List) { return (List) array; } …

getDimensions

配列の要素数を取得する。 多次元配列の場合、各次元の要素数が配列で返る。 Arrays#newInstance(Class, int[])で使用する。 作ったきっかけは何だったかな・・・ public static int[] getDimensions(Object array) { if (!array.getClass().isArray()) { re…

getComponentType

配列の要素のクラスを返す。 Class#getComponentType()は多次元配列の場合、1次元目の要素のクラスが配列クラスとなるのでその代用。 クラスが配列でなくなるまでClass#getComponentType()を再帰呼び出しする。 public static Class getComponentType(Class…

arrayToString

多次元配列のtoString()は末端の要素までちゃんと文字列化してくれないのでその代用。 配列の要素ごとに再帰呼び出しして[]で囲む。2/10追記。 jdk1.5からはArrays#deepToString()なんてのがあったのね〜 public static String arrayToString(Object object)…

getClassName

通常のClass#getName()では配列の時に判り辛いので、ソースコードに書くのと同じ書式で返すようにする。 public static String getClassName(Class clazz) { if (clazz.isArray()) { return getClassName(clazz.getComponentType()) + "[]"; } return clazz.…

getCause

まあわざわざ残すこともない気はするけど、結構良く使うので。 最初に発生したエラーの取得。 リフレクションなんか使ってると、呼び出したメソッドの中でエラーが起きると呼び出した側ではInvocationTargetExceptionだか何だかというエラーになる。 エラー…

shift

今日は配列の一部切り出し。 javascriptにはある機能なんだけどjavaのコアAPIにはない。 ジェネリクスを使えばもう少し綺麗になるのかな。 2/1追記。 jdk6からはArrays#copyOfRange()なんてメソッドがあるんだね、 jdk6はまだあまり使ってないから新機能のは…

join

今日はsplitの反対。 なぜにコアAPIにないのかと大勢の人が思っているであろう機能。 配列を結合して一つの文字列にする。 public static String join(String[] tokens, char delimiter, char quote, boolean allQuote) { if (tokens == null) { return ""; …

split

今日からは、今までに自作したユーティリティ的なメソッドやクラスを載せていく。 自分の備忘録としてね。 今日は、String#split()もどき。 用途としては、引用符内の区切り文字を無視したいときに使う。 作ったきっかけは、コマンドラインアプリケーション…

O/Rマッパーその2

ツールの中で重要なものがエンティティクラス。 大体はテーブルごとに作成し、カラムの値をそれぞれプロパティとして保持する。私はどうもこれが好きではない。 自分でも理由は良くわからないのだが・・・ クラスの数が膨大になる。 DBFluteはDBのスキーマか…

O/Rマッパー

以前仕事でDBFluteというO/Rマッパーを使ったことがあった。他にもHibernateやら何やらO/Rマッパーというツールがあるようだが・・・そんなに便利かねぇ?売りにしてるらしい機能はこういうもの。 接続/切断の自動化。 DBの癖や方言を隠蔽する。 SQLを知らな…

何だかよくわからないコード

int a = 2; a += a++; System.out.println(a); さて、aはいくつに?バイトコード見ればなるほど〜と思うんだけどね。 [[]]