【问题标题】:How to randomly return an Uppercase letter in a String?如何在字符串中随机返回大写字母?
【发布时间】:2023-03-10 20:47:02
【问题描述】:

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

我尝试了以下方法: 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);

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

干杯

【问题讨论】:

  • 显然,first 始终是0。那么,word1 是什么?
  • first 是使用Math.random() * word1 随机生成的。 word1length of the string
  • 是的,我可以看到。 word1 的值是多少?
  • 为什么first总是0?我以为是Math.random() * range
  • word1 的值是6 因为字符串“author”

标签: java string


【解决方案1】:

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

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

这是 Math.random() 的 javadoc

返回一个带正号的双精度值,大于或等于 0.0 小于 1.0。

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

【讨论】:

    【解决方案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());
    

    【讨论】:

      【解决方案3】:

      因为

      Math.random()
      

      返回一个介于 0 和 1 之间的值,所以

      (int) Math.random()
      

      总是零,因为零乘以任何东西都是零

      (int) Math.random() * word1;
      

      也始终为零。你需要括号。

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

      【讨论】:

        猜你喜欢
        • 2021-08-18
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多