【问题标题】:using Java String replace method produces different result than expected, why?使用 Java 字符串替换方法产生的结果与预期不同,为什么?
【发布时间】:2013-07-14 01:06:16
【问题描述】:

我有以下代码将单词的第一个字母大写。 当我尝试将我的关键功能浓缩在一个单行中时,我发现它没有按预期工作。 这是代码;

import java.util.*;
public class CapitalizeName {
   public static void main(String[] args) {
      String name="My naMe is ALex";
      String words="";
      String[] names=name.split(" ");
      for (String w: names) {
         w=w.toUpperCase(); //line 8
         w=w.replace(w.substring(1), w.substring(1).toLowerCase());  //line 9    
         //this single liner doesnot work:
         //w=w.toUpperCase().replace(w.substring(1), w.substring(1).toLowerCase());
        words+=w+" ";
      }
      System.out.println(words.trim());
     }  
    } 

输出是:

我叫亚历克斯

当我注释掉第 8 行和第 9 行并取消注释第 9 行时,我得到以下意外输出:MY NAME IS ALEX。 任何帮助表示赞赏?

【问题讨论】:

  • 提示,通常要避免使用一个衬垫。是的,它们很紧凑,但更神秘且更难调试。您可以轻松阅读和调试的代码是好的代码。您可以在 6 个月内轻松阅读的代码甚至更好。

标签: java string replace substring uppercase


【解决方案1】:

这一行代码就可以了

w = w.toUpperCase().replace(w.toUpperCase().substring(1),
                    w.substring(1).toLowerCase());

【讨论】:

    【解决方案2】:

    这行不通

    w=w.toUpperCase().replace(w.substring(1), w.substring(1).toLowerCase())
    

    因为w.substring(1)w.toUpperCase 不同。

    基本上你有...

    w = "MY NAME IS ALEX".replace("y Name Is Alex", "y name is alex");
    

    如您所见,String 没有什么可以匹配的。大写字符与提供的String 值不匹配

    你的双线方法更像...

     w=w.toUpperCase(); // "MY NAME IS ALEX"
     w="MY NAME IS ALEX".replace("Y NAME IS ALEX", "y name is alex");
    

    String 无法匹配文本。

    记住,这些方法是区分大小写的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2015-09-14
      • 2016-02-12
      • 1970-01-01
      • 2020-04-07
      • 2022-11-20
      • 2010-12-03
      相关资源
      最近更新 更多