Java

Java で、挿入ソートを考える。

import java.util.*; public class Sort { private Sort() { } public static void output(List data) {
for(int i = 0, n = data.size(); i < n; i++)
System.out.print(data.get(i) + ", "); System.out.println(); } public static void insert(List data) {
for(int i = 0, n = data.size(); i < n; i++ ) {
  int j = i;
  while(j > 0 && data.get(i) < data.get(j - 1))
    j--;
  int tmp = data.get(i);
  for(int k = i; k > j; k--)
    data.set(k, data.get(k - 1));
  data.set(j, tmp);
  output(data);
}
続きを読む

Java で、バブルソートを実現する。

Java でバブルソートのアルゴリズムを考える。

今さらバブルソート・・・でもバブルソートっていったい何なんだ?と思いつつプログラマ業を営んでいる輩も多いかもしれない。バブルソートのアルゴリズムを知らなくても業務プログラムは組めるからね。

続きを読む

デバッグの方法

みなさんは、日ごろプログラミングにおいてデバッグはどのようにされているだろうか。Eclipse などの開発環境を使っている場合は、それを利用すればいいと思う。

続きを読む

Java の参考書: JavaWorld

最近は Drupal のおかげで PHP にどっぷり浸かっている私ではあるが、自分自身の SE の道は Java と共に歩んできた。一番最初に Java でクライアントホテル予約システムのクライアント側のコードを書いたのは 1996年のことだから、今から 10年以上も前ということになる。

続きを読む

100% Pure Java のルール

ソースはここ。今なお生きる5つのルール。

  1. ネイティブメソッドを使用しないこと
  2. Java コア API 以外に外部への依存性がないこと
  3. Java インプリメンテーションのうちドキュメント化されていない部分を使用しないこと
  4. 「トンネル」メソッド (Runtime.exec、Runtime.load) を使用しないこと
  5. ハードウェア・プラットフォーム固有の定数を使用しないこと
続きを読む

Java で、ランダムな文字列を生成する方法

SecureRandom クラスを使う。以下は、16 バイトのランダムなバイト列を作る例。

import java.security.*; ... public final static String RANDOM_ALGORITHM = "SHA1PRNG"; public final static int RANDOM_LENGTH = 16; ... public byte[] getRandom() {
try {

    SecureRandom random = SecureRandom.getInstance(RANDOM_ALGORITHM);
    byte seed[]         = random.generateSeed(RANDOM_LENGTH);
    byte b[]            = new byte[RANDOM_LENGTH];

    random.setSeed(seed);
    random.nextBytes(b);

}catch(Exception e) {
    e.printStackTrace();
}

return b;
}
続きを読む

Java で、AES または DES でテキストを暗号化・復号化する方法

以下の encrypt メソッドの引数に String でテキスト文字列を渡すと、暗号化されたものがバイト列で返ってくる。復号は decrypt の引数にそのバイト列を渡す。両メソッド共、crypt_spec 引数に AES を指定すれば AES で暗号するし、DES を指定すれば DES で暗号化する。

import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; // CHANGE THIS VALUE DEPENDING ON WHAT YOU WANT public static final int MESSAGE_LENGTH = 1024; /** * @param text * Message to encrypt * @param secret_key * Secret Key * @param crypt_spec * Crypt algorithm like "AES" or "DES" * @return Encrypted Byte Strings */ public byte[] encrypt(String text, byte[] secret_key, String crypt_spec)
    throws InvalidKeyException, IllegalBlockSizeException, IOException,
    BadPaddingException {

SecretKeySpec sKey = new SecretKeySpec(secret_key, crypt_spec);
byte[] secret = new byte[MESSAGE_LENGTH];

try {
    Cipher cipher = Cipher.getInstance(crypt_spec);
    cipher.init(Cipher.ENCRYPT_MODE, sKey);
    secret = cipher.doFinal(text.getBytes());
} catch (Exception e) {
    System.out.println(this.getClass().getName()
            + ".encrypt: Exception:");
    e.printStackTrace();
}
return secret;
} /** * @param b * Encypted Byte Message * @param crypt_spec * Crypt Algorithm like "AES" or "DES" * @return Decrypted String */ public String decrypt(byte[] b, byte[] secret_key, String crypt_spec)
    throws InvalidKeyException, IllegalBlockSizeException, IOException,
    BadPaddingException {

SecretKeySpec sKey = new SecretKeySpec(secret_key, crypt_spec);
byte[] secret = new byte[MESSAGE_LENGTH];

try {
    Cipher cipher = Cipher.getInstance(crypt_spec);
    cipher.init(Cipher.DECRYPT_MODE, sKey);
    secret = cipher.doFinal(b);
} catch (Exception e) {
    System.out.println(this.getClass().getName()
            + ".decrypt: Exception:");
    e.printStackTrace();
}
return new String(secret);
}
続きを読む
Java を購読