【问题标题】:TitleCaps program will not translate first character in a String correctly (why?)TitleCaps 程序不会正确翻译字符串中的第一个字符(为什么?)
【发布时间】:2016-10-21 13:35:28
【问题描述】:

看看你们能不能解决这个问题。我用 Java 编写了一个标题大写程序,该程序可以接受一串 ASCII 字符并将所有单词(仅由字母 A-Z 或 a-z 组成的子字符串)转换为标题大小写。所以字符串“#@hello!_world$”变成了“#@Hello!_World$”。但是这个程序拒绝正确翻译字符串第一个索引处的非字母,尽管我尽了最大的努力来纠正它。

public static String LetterCapitalize(String str) {

    String newStr = "";
    System.out.println(newStr);

    for (int i = 0; i < str.length(); i++) {

        // if first character is a letter and not uppercase
        if (i == 0 && (!isUpperCase(str.charAt(i)))) {
            Character m = (char) ((int) str.charAt(i) - 32);
            newStr = newStr + m;
        } // if first character is a letter and uppercase
        else if (i == 0 && (isUpperCase(str.charAt(i)))) {
            Character m = str.charAt(i);
            newStr = newStr + m;
        } // if first character is not a letter
        else if (i == 0 && (!isLetter(str.charAt(i)))) {
            Character m = str.charAt(i);
            newStr = newStr + m + m;
        } // if character is first letter in a word
        else if (!isLetter(str.charAt(i - 1)) && isLetter(str.charAt(i)) && !isUpperCase(str.charAt(i))) {
            Character m = (char) ((int) str.charAt(i) - 32);
            newStr = newStr + m;
        } // all other 
        else {
            Character m = str.charAt(i);
            newStr = newStr + m;
        }
    }

    return newStr;

}
public static boolean isUpperCase(char c) {
    boolean isCap;

    if (c >= 'A' && c <= 'Z') {
        isCap = true;
    } else {
        isCap = false;
    }

    return isCap;
}
public static boolean isLetter(char c) {
    boolean isLetter;

    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
        isLetter = true;
    } else {
        isLetter = false;
    }

    return isLetter;
}

【问题讨论】:

  • 您能否给我们一些输入示例以及您期望得到的输出以及实际得到的结果(错误)。
  • 在上面的示例中,我输入“#@hello!_world$”,期望程序返回“#@Hello!_World$”。但是,实际上程序返回“□@Hello!_World$”。显然这是输出字符串的错误第一个字符。
  • 这一行是错误的: if (i == 0 && (!isUpperCase(str.charAt(i)))) { - 它假定它是一个小写字母。你需要看看它是否是一个小写字母。并非所有非大写字符都是字母。

标签: java string non-ascii-characters


【解决方案1】:

这一行是错误的:if (i == 0 &amp;&amp; (!isUpperCase(str.charAt(i)))) { - 它假定它是一个小写字母。你需要看看它是否是一个小写字母。并非所有非大写字符都是字母。所以你应该有一些类似的东西

if (i==0 && isLetter() && !isUpperCase())

另一种方法是先检查它是否是一封信。

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多