isUpperCase / toTitleCase / isWhiteSpace问题。

时间:2018-02-17 06:31:38

标签: java

我创建了一个代码,当我输入一个字符串时,它会检查是否需要将单词更改为大写,只显示每个单词的第一个字母。例如,当字符串“棕色的大狗!”输入后,它将成为“布朗大狗!”

这是我的代码

public String convertToTitleCase(String s) 
   {
  if (s.isEmpty())
      return "";
  else 
  {
       String word = "";
       boolean flag = false;
       char w = s.charAt(0);
       if(!Character.isUpperCase(s.charAt(0)))
           w = Character.toTitleCase(s.charAt(0)); 
       word = word + w;
       if(s.length()==1)
           return word;
       for (int i = 1; i<(s.length()-1); i++)
       {
           if (!Character.isWhitespace(s.charAt(i)) && flag == false)
               word = word + s.charAt(i);
           if (!Character.isWhitespace(s.charAt(i)) && flag == true)
               flag = false;
           if (Character.isWhitespace(s.charAt(i)))
           {
               word = word + " ";
               w = s.charAt(i+1);
               word = word + Character.toTitleCase(w);
               flag = true;
           }
       }
       if (!Character.isWhitespace(s.charAt(s.length()-2)))
            word = word + s.charAt(s.length()-1);  
       return word;
    }

}

它做了我想要的一切,从改变“g”到“G”到改变“A dog”到“A Dog”,将“aaab bccc cddd”改为“Aaab Bccc Cddd”,并认出它是否为空。

然而,我的测试人员发现了它的错误,我似乎无法弄清楚它是什么。我想知道另一组眼睛是否可以检查我的代码是否存在任何常见错误或似乎无效的问题。

2 个答案:

答案 0 :(得分:0)

你声明了这个

  

boolean flag = false;

然后你在java中检查一个布尔变量的值为

  

flag == false

尝试

  

(!标志)

另外,你的测试人员是否分享了他的测试用例失败了,或者你应该自己解决这个问题?

答案 1 :(得分:0)

我将向您展示另一种解决方案:

private static String convertToTitleCase(String s)
{
    Matcher m = Pattern.compile("(?<=\\s)[a-z]").matcher(s);
    StringBuilder builder = new StringBuilder(s);
    while (m.find()) {
        builder.replace(m.start(), m.start() + 1, m.group().toUpperCase());
    }
    return builder.toString();
}

这使用正则表达式来查找空白之后的所有小写字符。然后使用循环和字符串构建器,它将替换所有使用大写字母的小写字母。