java - 使用 Java 字符串替换方法产生与预期不同的结果,为什么?

标签 java string replace substring uppercase

我有以下代码来将单词的首字母大写。 当我尝试将我的关键函数压缩在一行中时,我发现它没有按预期工作。 这是代码;

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());
     }  
    } 

输出是:

My Name Is Alex

当我注释掉第 8 行和第 9 行并取消注释第 9 行制作一个衬里时,我得到以下意外输出:MY NAME IS ALEX。 感谢任何帮助?

最佳答案

这行不通

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 无法匹配文本。

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

关于java - 使用 Java 字符串替换方法产生与预期不同的结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666582/

相关文章:

java - 使用 concat() 时,JPA native 查询返回字节数组而不是字符串

java - 替换java字符串中的字符

java - Android 上拉伸(stretch)屏幕的问题

Java - "varible name"无法解析为变量 - 我找不到我的错误所在

string - VB6 中的字体居中

string - R:如何替换字符串中的第 5 个元素?

java - 替换/审查

java - 用于查找java代码中包命名空间冲突的工具

java - Swing 重画问题

java - 在java中将字母数字字符串转换为字节?