JavaでLDAPアクセスのライブラリを作る ~ 更新・作成・削除
2019/04/05
-Java
2004/02 前回に引き続き、LDAPアクセスのライブラリを作ります。今回は更新系です。 前回の属性の取得を行うクラス同様、Command型の設計にしました。 更新を行うModifyAttribut ...
XMLとObjectの双方向変換はjava.beans.XMLEncoder &XMLDecoderで簡単
2017/01/15
-Java
2009/4 JAXBとかcommons.digester等、XML←→Object変換するライブラリはたくさん ありますが、実はJDKのクラスの中にも存在するのです。 それが ・java.beans ...
Websphereでcommons-loggingを使用する際の注意点
2017/01/15
-Java
2008/10 commons-loggingからLog4jを使う場合、以下に示すような 「commons-logging.propertiesとlog4j.xmlをクラスパス上に配置」 します。 [ ...
[Java] 並列処理フレームワークcommonj.workを自分で実装する
2017/01/15
-Java
2008/04 APサーバー上で非同期並列処理をしたい場合があります。 例えば、大量の複数データを別のコンテンツサーバから取得する場合等です。 この場合1件データを取得して次のデータを取得…というよう ...
java.text.RuleBasedCollatorで文字の順序付けルールを作る
2017/01/15
-Java
2007/05 Javaには文字列の順序付けを変える便利なクラスがあるので紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
package sample; import java.text.CollationKey; import java.text.ParseException; import java.text.RuleBasedCollator; import java.util.Arrays; public class CollatorSample { /** * RuleBasedCollatorで * 数字よりアルファベットが弱い、英大文字より小文字が弱いと判断するルール * を作成し、RuleBasedCollatorを使った文字列の比較、ソート、CollatorKeyを * 使ったソートの結果をStringの文字列比較、ソートの結果を出力し違いを検証 * する。 */ public static void main(String[] args) throws ParseException { //数字よりアルファベットが弱い、英大文字より小文字が弱いと判断するルール String rules = " < a < b < c < d < e < f < g < h < i < j < k < l < m" + " < n < o < p < q < r < s < t < u < v < w < x < y < z" + " < A < B < C < D < E < F < G < H < I < J < K < L < M" + " < N < O < P < Q < R < S < T < U < V < W < X < Y < Z" + " < 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9"; RuleBasedCollator collator = new RuleBasedCollator(rules); String s1 = "a"; String s2 = "1"; //作成したルールで比較 System.out.println( "collator.compare(s1, s2)=" + collator.compare(s1, s2)); //Stringで普通に比較 System.out.println("s1.compareTo(s2)=" + s1.compareTo(s2)); //ソート String[] srcArray = { "888RRR", "AAA777", "BBB222", "DDD888", "666ZZZ", "aaa000" }; String[] array1 = new String[srcArray.length]; String[] array2 = new String[srcArray.length]; for (int i = 0; i < srcArray.length; i++) { array1[i] = srcArray[i]; array2[i] = srcArray[i]; } Arrays.sort(array1); //Collator + Arraysでソート。1度の比較ならコスト低 Arrays.sort(array2, collator); printArray(srcArray, "ソート前= "); printArray(array1, "普通にソート= "); printArray(array2, "Collatorでソート= "); //CollatorKey + Arraysでソート //CollatorKeyを作るコストが発生。しかし何度も比較するならコスト低 CollationKey[] collationKeyArray = new CollationKey[srcArray.length]; for (int i = 0; i < srcArray.length; i++) { collationKeyArray[i] = collator.getCollationKey(srcArray[i]); } Arrays.sort(collationKeyArray); printArray(collationKeyArray, "CollationKeyでソート="); } private static void printArray(String[] array, String description) { System.out.print(description + "{"); StringBuffer buf = new StringBuffer(); for (int i = 0; i < array.length; i++) { buf.append(array[i]); buf.append(","); } System.out.println(buf.substring(0, buf.length() - 1) + "}"); } private static void printArray(CollationKey[] array, String description) { System.out.print(description + "{"); StringBuffer buf = new StringBuffer(); for (int i = 0; i < array.length; i++) { buf.append(array[i].getSourceString()); buf.append(","); } System.out.println(buf.substring(0, buf.length() - 1) + "}"); } } |
[実行結果] collator.compare ...
Javaで指定した時刻の次の00分、30分を求める方法
2017/01/15
-Java
2007/04 意外とどうやればいいかわかりにくいのが、日付の計算です。 一番シンプルなのがCalendarをm秒に直して引き算して1日のm秒で割る 方法です。 [crayon-600f20a32e6 ...
Javaで日付の差を求める方法
2017/01/15
-Java
2007/02 意外とどうやればいいかわかりにくいのが、日付の計算です。 一番シンプルなのがCalendarをm秒に直して引き算して1日のm秒で割る 方法です。 [crayon-600f20a32eb ...
Log4jがログを出力したソースファイル名、行番号等を出力する仕組みを解明
2017/01/15
-Java
2006/07 Log4jでフォーマットに(%F:%L)を指定すると(HogeServlet.java:75) みたくログを出力したソースファイル名や行番号を出力してくれますが、 「なんでソースファイ ...
java.sql.DatabaseMetaDataでDBメタ情報からSQLを自動生成する
2017/01/15
-Java
2006/01 java.sql.DatabaseMetaDataを使うとDBのメタ情報(テーブル定義情報等)を 取得することが出来ます。テーブル名や列名、属性、長さ等です。 これらを元にSQL文を生 ...
Javaで1年分のカレンダーを出力するツール
2017/01/15
-Java
2006/01 新年ということでカレンダーを出力するツールを作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
package tool; import java.util.Calendar; import java.util.GregorianCalendar; public class CalendarMaker { /** * args[0]に指定したカレンダーを出力する * @param args args[0]に対象年(yyyy) */ public static void main(String[] args) { String yyyy = args[0]; int year = Integer.parseInt(yyyy); for (int i = 1; i < 13; i++) { int month = i; printCalendar(year, month); System.out.println(""); System.out.println(""); } } /** * 指定した年月のカレンダーを出力する * @param year 年 * @param month 月(1〜12) */ private static void printCalendar(int year, int month) { System.out.println(year + "年" + month + "月"); String[] dayOfWeeks = { "日", "月", "火", "水", "木", "金", "土" }; for (int i = 0; i < dayOfWeeks.length; i++) { System.out.print(dayOfWeeks[i] + " "); } System.out.println(""); String space = " "; int day = 1; GregorianCalendar c = new GregorianCalendar(year, --month, day); for (;;) { int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); int date = c.get(Calendar.DATE); if (date == 1) { String indent = ""; if (dayOfWeek != Calendar.SUNDAY) { indent = space.substring(0, (dayOfWeek - 1) * 3); } System.out.print(indent); } String pad = ""; if (date < 10) { pad = " "; } System.out.print(pad + date + " "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { System.out.println(""); } c.add(Calendar.DATE, 1); if (month != c.get(Calendar.MONTH)) { break; } } System.out.println(""); } } |
実行してみましょう javac -d . Calenda ...