迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

用 Java 生成随机字符串

作者:迹忆客 最近更新:2023/03/26 浏览次数:

字母数字字符串包含数字和字母字符。在 Java 中,在许多情况下都使用字母数字字符串。例如,在用户注册应用程序后生成密码;在生成主键条目以标识数据库中的元素时;生成会话 ID 等。

本文将讨论四种在 Java 中生成随机字母数字字符串的方法。

  1. 正则表达式
  2. Math.random() 方法
  3. Charset
  4. Apache Commons Lang

在 Java 中使用正则表达式生成随机字符串

此方法很简单,给出了一个包含小写字符和数字的大写字母数字字符串。

第一步是取 0 到 256 之间的字符。

第二步是过滤这些字符,留下我们想要包含在随机字符串中的元素。请记住,我们想要留下的字符是 0-9 和 A-Z,所以我们可以创建一个过滤器来删除所有其他的字符。

下一步是选择随机字符并将它们添加到 StringBuffer 中。然后我们使用 toString() 方法从 StringBuffer 中创建一个字符串。

下面是一个示例代码。

import java.nio.charset.*;
import java.util.*;

class GenerateAlphaNumericString {
    static String getRandomString(int i) 
    {
    
        // bind the length 
        bytearray = new byte[256];         byte[] bytearray;
        String mystring;
        StringBuffer thebuffer;
        String theAlphaNumericS;

        new Random().nextBytes(bytearray); 

        mystring 
            = new String(bytearray, Charset.forName("UTF-8")); 
            
        thebuffer = new StringBuffer();
        
        //remove all spacial char 
        theAlphaNumericS 
            = mystring 
                .replaceAll("[^A-Z0-9]", ""); 

        //random selection
        for (int m = 0; m < theAlphaNumericS.length(); m++) {

            if (Character.isLetter(theAlphaNumericS.charAt(m)) 
                    && (i > 0) 
                || Character.isDigit(theAlphaNumericS.charAt(m)) 
                    && (i > 0)) {

                thebuffer.append(theAlphaNumericS.charAt(m)); 
                i--; 
            } 
        } 

        // the resulting string 
        return thebuffer.toString(); 
    } 

    public static void main(String[] args) 
    {
        // the random string length
        int i = 15; 

        // output 
        System.out.println("A random string: " +  getRandomString(i)); 
    } 
}

输出:

A random string: 4H4V7FWP8ZUKEGW

在 Java 中使用 Math.random() 方法生成随机字母数字字符串

它涉及手动创建一个包含所有可能字符的字符串。然后,通过从先前创建的字符串中选择字符和数字,来创建一个定义长度的随机字符串。

首先,我们定义了我们需要的两个变量-StringBuilderStringString 将包含所有大写字母和数字 0-9。该字符串不应有符号或空格,因为该字符串中字符的索引将用于随机选择字符。

其次,定义限于我们要创建的随机字符串的长度的迭代。

第三,使用 Math.random() 方法生成一个随机索引。从先前创建的字符串中获取字符,该字符是随机生成的索引位置,并将其附加到 StringBuilder。然后,我们可以使用 toString() 方法从 StringBuilder 中获取随机字符串。

下面是一个示例代码。

class AlphaNumericStringGenerator {
    static String getRandomString(int i) 
    {
        String theAlphaNumericS;
        StringBuilder builder;
        
        theAlphaNumericS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                    + "0123456789"; 

        //create the StringBuffer
        builder = new StringBuilder(i); 

        for (int m = 0; m < i; m++) {

            // generate numeric
            int myindex 
                = (int)(theAlphaNumericS.length() 
                        * Math.random()); 

            // add the characters
            builder.append(theAlphaNumericS 
                        .charAt(myindex)); 
        } 

        return builder.toString(); 
    } 

    public static void main(String[] args) 
    {
        // the random string length
        int i = 15; 

        // output 
        System.out.println("A random string: " +  getRandomString(i)); 
    }
} 

输出:

A random string: BCQJPZLG3OC1MQD

使用 Charset 生成

我们使用 Charset,它位于 java.nio.charset 包中。字符集代表字符集,并表示字符和数字之间的映射。下面说明使用 Charset 创建字母数字字符串的过程。

第一步是获取 0 到 256 之间的字符。然后将 Random() 方法应用于上面的字符数组。第三步是通过迭代检查每个字符是字母还是数字。如果是它们中的任何一个,我们都将该字符添加到字符串的末尾,直到达到定义的长度。使用 toString() 方法将附加在 StringBuilder 上的字符转换为所需的字符串。

下面是一个示例代码。

import java.nio.charset.*;
import java.util.*; 

class AlphaNumericStringGenerator {
    static String getRandomString(int i) 
    {

        byte[] bytearray;
        String mystring;
        StringBuffer thebuffer;
        
        bytearray = new byte[256]; 
        new Random().nextBytes(bytearray); 

        mystring 
            = new String(bytearray, Charset.forName("UTF-8")); 

        // Create the StringBuffer
        thebuffer = new StringBuffer(); 

        for (int m = 0; m < mystring.length(); m++) {

            char n = mystring.charAt(m); 

            if (((n >= 'A' && n <= 'Z') 
                || (n >= '0' && n <= '9')) 
                && (i > 0)) {

                thebuffer.append(n); 
                i--; 
            } 
        } 

        // resulting string 
        return thebuffer.toString(); 
    } 

    public static void main(String[] args) 
    {
        // the random string length
        int i = 15; 

        // output 
        System.out.println("A random string: " +  getRandomString(i)); 
    }
}

输出:

A random string: XKT0JAHPRPZ6A3X

使用 Apache Commons Lang

这是最容易实现的方法,因为由第三方来处理实现,在这种情况下是 Apache 程序包。

Apache Commons Lang 软件包提供了许多与 Java 中的字符串操作有关的帮助程序实用程序。由于它是第三方,因此必须首先将其添加为项目中的依赖项。

我们可以使用 RandomStringUtils 类来生成随机字符串。此类有三种可以提供随机字符串的方法:

  1. RandomStringUtils.randomNumeric:创建一个指定长度的随机字符串。
  2. RandomStringUtils.randomAlphabetic:创建一个随机的字母字符串,包含大小写字符
  3. RandomStringUtils.randomAlphanumeric:创建具有指定长度的随机字母数字字符串。

下面是一个代码示例。

import org.apache.commons.lang3.RandomStringUtils;

public class Index {
    public static void main(String[] args){
        System.out.println(RandomStringUtils.randomAlphanumeric(15)toUpperCase(););
    }
}

输出:

RM0WMYOKN7AS0KA

RandomStringUtils.randomAlphanumeric 直接实现随机字母数字,并且可以选择使用小写字母或大写字母或同时使用两者。当你不想在代码中实现字符串生成时,这是一种有效的方法。Apache 库功能强大,并具有其他许多功能,例如基本的数值方法,并发性和对象反射。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便