【发布时间】:2021-09-28 02:32:22
【问题描述】:
如果我想在 a 和 z 之间随机选择一个字母,我假设我必须使用 Random 类:
Random rand = new Random();
但是由于这只会生成数字,我需要做什么才能将其应用于字母?
【问题讨论】:
如果我想在 a 和 z 之间随机选择一个字母,我假设我必须使用 Random 类:
Random rand = new Random();
但是由于这只会生成数字,我需要做什么才能将其应用于字母?
【问题讨论】:
Random r = new Random();
char c = (char) (r.nextInt(26) + 'a');
【讨论】:
字母,或更准确地说,字符是数字(扩展 ascii 中从 0 到 255,非扩展中从 0 到 127)。例如,在 ASCII 中,'A'(引号表示字符,而不是字符串)是 65。所以 1 + 'A' 会给你 66 - 'B'。 所以,你可以取一个从 0 到 26 的随机数,把它加到字符 'a' 上,你就是:随机字母。
你也可以用一个字符串来做,输入“abcdefghijklmnopqrstuvwxyz”并在这个链中随机位置,但巴克解决方案更优雅。
【讨论】:
@Michael Barker 的更改版本
Random r = new Random();
int c = r.nextInt(26) + (byte)'a';
System.out.println((char)c);
【讨论】:
byte?
char randomLetter = (char) ('a' + Math.random() * ('z'-'a' + 1));
【讨论】:
为什么假设使用 Random 而不是 Math.random?你甚至可以让代码更短...
public static char genChar(){
return (char)(Math.random()*26 + 'a');
}
【讨论】:
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
...
randomAlphabetic(1).toLowerCase()
这会给你一个带有单个字符的字符串
【讨论】:
要从 (a- z) 中随机选择一个字母,我会执行以下操作:
Random rand = new Random();
...
char c = rand.nextInt(26) + 'a';
由于 Random.nextInt() 生成一个从 0 到 25 的值,因此您只需添加一个偏移量 'a' 即可生成小写字母。
【讨论】:
使用字母的ascii值生成随机数。
【讨论】:
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);
}
【讨论】:
a-z 范围之外?这永远不会发生。