【问题标题】:question with returning an accessor method返回访问器方法的问题
【发布时间】:2010-03-02 01:04:26
【问题描述】:

无论输入什么,我如何让访问器方法返回名称的第一个字母为大写字母,其余字母为小写字母?

public class Name
{
    private String first;
    private String last;

    /**
     * Constructor for objects of class Name
     */
    public Name(String firstName, String lastName)
    {
        first = firstName;
        last = lastName;
    }

    /**
     * @returns firstName
     */ 
    public String getFirstname()
    {
        return first;       
    }

    /**
     * @returns lastName
     */ 
    public String getLastname()
    {
        return last;  
    }

    /**
     * @returns Fullname
     */ 
    public String getFullname()
    {
        return first + last;
    }

    /**
     * @para new firstname
     */
    public void setFirstname(String firstName)
    {
        first = firstName;
    }
}

【问题讨论】:

  • 不要!有些人的名字中有不止一个大写字母。
  • 我同意卡尔的观点。在您的输入中,您应该建议将其大写,但您不应更改它。

标签: java string


【解决方案1】:
 public static String capitalizeFirst(String s) {
   return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase();
 }

 public String getFirstname() {
    return capitalizeFirst(first);
 }

顾名思义,capitalizeFirst 将非空字符串的第一个字符大写,并将字符串的其余部分转换为小写。

【讨论】:

    【解决方案2】:

    使用来自 Commons Lang 的 StringUtils.capitalize

    如果有可用的库,请始终使用它,它们可能经历了所有你只能在解决一个又一个错误后才能弄清楚的极端情况。

    【讨论】:

    • 但这并不能确保名称的其余部分是小写的;它只是将第一个大写,其余部分保持原样。 OP 说“不管输入什么,其余的都是小写”
    【解决方案3】:

    这是我真正想到的唯一方法:

    last.substring(0,1).toUpperCase() + last.substring(1).toLowercase()
    

    【讨论】:

    • 在代理对上。 (这适用于名字不寻常的人。)
    • null 上也失败(在构造中未检查)。
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多