【问题标题】:Why won't toLowerCase convert the string element as lowercase? [duplicate]为什么 toLowerCase 不将字符串元素转换为小写? [复制]
【发布时间】:2020-08-18 07:38:51
【问题描述】:

为什么不将字符串元素转换为小写? 给定字符串输入,转换为字符串数组。我希望每个单词都是小写的。但是,当我调试时,我注意到我的数组中的元素在情况下仍然不同。

   String[] words = paragraph.split(" ");      //[how, to, do, in, java]
    for(String word : words){
        word = word.toLowerCase();
    }

【问题讨论】:

  • 确实如此,您只是没有对结果做任何事情。 toLowerCase 将返回一个新对象
  • 如果您使用旧版for-loop 会更好:for (int i = 0; i < words.length; i++) words[i] = words[i].toLowerCase();
  • 对于某些语言,按照您的方式进行操作会更改单词并将数组中的旧单词对象替换为新单词对象。 Java 不能那样工作。

标签: java arrays string


【解决方案1】:

因为通过执行toLowerCase(),您正在实例化一个新的String。因此,您的 word 变量不再是对数组项的引用。

要么将toLowerCase() 的结果添加到新数组中,要么使用索引循环:

for(i = 0;i < words.size();i++) {
    words[i] = words[i].toLowerCase();
}

【讨论】:

    【解决方案2】:

    toLowerCase 将返回一个new 对象,您必须存储它。

    您可以使用Java 8 一行来实现它:

    Arrays.setAll(words, i -> words[i].toLowerCase());
    

    【讨论】:

      【解决方案3】:

      您没有修改数组,而是将小写字符串分配给单词实例 您可以使用经典的 for 循环并将小写值分配给数组的当前索引

      例如,你的 for 循环应该是这样的

      for(int i=0;i< words.length;i++){
          words[i] = words[i].toLowerCase();
          System.out.println(words[i]);
      }
      

      【讨论】:

        【解决方案4】:

        默认情况下,字符串对象是不可变的。当您将某些内容重新分配给字符串时,它会创建一个新对象,因此单词数组中的原始字符串对象保持不变。

        【讨论】:

          猜你喜欢
          • 2018-02-11
          • 2022-11-14
          • 2021-05-09
          • 2014-05-01
          • 2014-08-30
          • 1970-01-01
          • 2016-11-19
          • 1970-01-01
          • 2012-12-02
          相关资源
          最近更新 更多