随机生成字符串

满足给定的正则表达式

Posted by Saylst on March 24, 2017

随机字符串

原始需求:请求中有一个可选参数,如果没有带需要后端随机生成一个,而且要满足给定正则表达式的校验,并返回在响应的body中。

需求分解:

1.随机生成一个字符串

2.满足给定的正则表达式


网上查询,有一个 Xeger 的类可以实现,代码如下:

import nl.flotsam.xeger.Xeger;

public class XegerTest {

    public static void main(String[] args) 
	{
    
	    String regex = "^[a-zA-Z0-9-]{1,64}$";
	      
	    Xeger generator = new Xeger(regex);
	       
	    String result = generator.generate(); 
    }
}

但是鉴于当时公司的开源软件库中没有这个包,无法使用 Xeger 类。

于是,用下面的方式替代:

private String allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGRHIJKLMNOPQRSTUVWXYZ0123456789-";

public String getRandomValue(int min, int max) {
    Random random = new Random();
    int length = random.nextInt(max - min + 1) + min;
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < length; i++) {
    sb.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
    }
    return sb.toString();
} 

min和max表示字符串的最小、最大长度。