如何随机返回字符串中的大写字母?

时间:2014-03-20 02:48:41

标签: java string

我有一个字符串作为输入,我想将整个字符串转换为小写,除了一个需要大写的随机字母。

我尝试过以下方法:     splited是输入字符串数组

word1 = splited[0].length();
word2 = splited[1].length();
word3 = splited[2].length();
int first = (int) Math.random() * word1;
String firstLetter = splited[0].substring((int) first, (int) first + 1);
String lowcase1 = splited[0].toLowerCase();

char[] c1 = lowcase1.toCharArray();
c1[first] = Character.toUpperCase(c1[first]);
String value = String.valueOf(c1);

System.out.println(value);

当我尝试打印字符串时,它总是将第一个字母作为大写字母返回,其余字符串是小写字母。为什么它不是返回随机字母而是第一个字母。

干杯

3 个答案:

答案 0 :(得分:4)

理解你的问题的关键是你将word1乘以零。

您的代码int first = (int) Math.random() * word1;每次都返回相同的数字,因为(int) Math.random()每次都返回零。

这里是Math.random()

的javadoc
  

返回带有正号的double值,大于或等于   0.0且小于1.0。

任何小于1且大于0的数字,一旦转换为整数,则为零。这是因为浮点数被截断了。

答案 1 :(得分:2)

String str = "my string";
Random rand = new Random(str.length());

int upperIndex = rand.nextInt();

StringBuffer strBuff = new StringBuffer(str.toLowerCase());
char upperChar = Character.toUpperCase(strBuff.charAt(upperIndex));
strBuff.replace(upperIndex, upperIndex, upperChar);

System.out.println(strBuff.toString());

答案 2 :(得分:1)

由于

Math.random()

返回0到1之间的值,所以

(int) Math.random()

始终为零,因为零乘以任何值为零

(int) Math.random() * word1;

也总是零。你需要括号。

int first = (int) (Math.random() * word1);