在Java中,如何随机选择一个字母(a-z)?

16

如果我想在字母a和字母z之间随机选择一个字母,我需要使用Random类:

Random rand = new Random();

但是由于这只生成数字,我需要做什么才能将其应用于字母呢?

9个回答

26
Random r = new Random();
char c = (char) (r.nextInt(26) + 'a');

有关其他字符范围,请参见http://www.asciitable.com/,然后访问http://www.unicode.org/charts/。 - Matthew Gilliard

5
字母,更确切地说是字符,是数字(在扩展ASCII中从0到255,在非扩展的情况下从0到127)。例如,在ASCII中,“A”(引号表示字符,与字符串相对)是65。因此,1 + 'A'会给你66- 'B'。所以,你可以从0到26中随机选一个数字,加上字符'a',这样就有了随机字母。
你也可以使用字符串,输入“abcdefghijklmnopqrstuvwxyz”,并在该链中取一个随机位置,但Barker的解决方案更加优雅。

我认为“从给定字符串中随机选择一个字符”是更优雅的解决方案。 - Thorbjørn Ravn Andersen

3
改进版的@Michael Barker
Random r = new Random();
int c = r.nextInt(26) + (byte)'a';
System.out.println((char)c);

1
为什么要进行byte类型转换? - aioobe

2
char randomLetter = (char) ('a' + Math.random() * ('z'-'a' + 1));

2
为什么要使用 Random 而不是 Math.random?你甚至可以使代码更短...
public static char genChar(){
    return (char)(Math.random()*26 + 'a');
}

1
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
...
randomAlphabetic(1).toLowerCase()

这会给你一个只包含单个字符的字符串。

1

如果要从(a-z)中随机选择一个字母,我会按照以下步骤进行:

Random rand = new Random();
...
char c = rand.nextInt(26) + 'a';

由于 Random.nextInt() 生成的值范围为0到25,因此您只需要添加偏移量'a'即可生成小写字母。


0
Random r = new Random();
char symbel = (char)(r.nextInt(26) + 'a');
if(symbel>='a' && symbel <= 'z') {
    System.out.println("Small Letter" + symbel);
} else {
    System.out.println("Not a letter" + symbel);
}

1
为什么要检查字符是否在“a”-“z”范围之外?那是不可能发生的。 - user85421

0
使用字母的ASCII值来生成随机数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接