2024.12.18
乱数で文字列を作成
はじめに
9etHqTuutGpLFBbUXcyl … 20文字 8ycuc0Hkpa … 10文字 i5HVY5s6 … 8文字
これは、自動パスワード生成などに利用できます。
文字列作成に使う文字について
半角の数字
0123456789
半角の大文字アルファベット
ABCDEFGHIJKLMNOPQRSTUVWXYZ
半角の小文字アルファベット
abcdefghijklmnopqrstuvwxyz
Javaソースコード
RandomChars.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043
import java.util.Scanner; public class RandomChars { // n文字のランダムな英数字を戻す private static String create_randomchars( int n ) { // nが1未満の場合、nullを戻す if ( 1 > n ) return null; // nが1以上の場合 // 使用する文字を指定 String chaset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; // 一時的に結果を格納するn個のchar配列を作成 char[] chas = new char[ n ]; // n回のループを作成 for ( int i = 0; i < n; i++ ) { // 0~chaset.length()-1の乱数をindexに代入 int index = (int)( Math.random() * (double)chaset.length() ); // chasetのindex番目の文字をchas[i]に代入 chas[ i ] = chaset.charAt( index ); } // 配列chasでStringを作成して戻す return new String( chas ); } // メイン public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // 文字数の入力 System.out.println( "文字数を入力してください" ); int n = scan.nextInt(); // 結果を出力 System.out.println( create_randomchars( n ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis RandomChars.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac RandomChars.java
実行
C:\talavax\javasample>java RandomChars
実行結果
110.0 90.0 1000.0 10.0
Javaソースコードの解説
ここから、ソースコードを順番に説明していきます。
001
import java.util.Scanner;
003
public class RandomChars {
クラス名を、RandomCharsとしています。
004 005 006
// n文字のランダムな英数字を戻す private static String create_randomchars( int n ) {
007 008
// nが1未満の場合、nullを戻す
if ( 1 > n ) return null;
010 011 012
// nが1以上の場合 // 使用する文字を指定 String chaset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
ここからnが1以上の処理です。
String型のchasetに"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"を代入しています。
014 015
// 一時的に結果を格納するn個のchar配列を作成 char[] chas = new char[ n ];
017 018
// n回のループを作成 for ( int i = 0; i < n; i++ ) {
019 020 021 022 023
// 0~chaset.length()-1の乱数をindexに代入 int index = (int)( Math.random() * (double)chaset.length() ); // chasetのindex番目の文字をchas[i]に代入 chas[ i ] = chaset.charAt( index );
Math.random()メソッドを使って0から(chasetの文字数-1)の乱数を発生し、int型の変数indexに代入しています。
Math.randomメソッド
public static double Math.random()
・乱数を返します。 パラメータ なし 戻り値 0.0以上、1.0未満の乱数
Stringのlengthメソッド
int length()
・この文字列の長さを返します。 パラメータ なし 戻り値 文字列の長さ
StringのcharAtメソッド
public char charAt(int index)
・指定されたインデックスのchar値を返します。 パラメータ index:文字位置(先頭文字は0) 戻り値 文字コード
026 027
// 配列chasでStringを作成して戻す return new String( chas );
030 031 032
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
033 034
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
036 037 038
// 文字数の入力 System.out.println( "文字数を入力してください" ); int n = scan.nextInt();
文字数の入力部分です。
nextIntメソッドで、キーボードから入力された1行を読み取り、その値をint型の変数nに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数nに格納されます。
040 041
// 結果を出力
System.out.println( create_randomchars( n ) );
printlnで結果を出力しています。
以上です。