代码之家  ›  专栏  ›  技术社区  ›  yoav.str

在android中将CharSequence第一个字母改为大写

  •  7
  • yoav.str  · 技术社区  · 14 年前

    我试着这样做:

     String s = gameList[0].toString();
    s.replaceFirst(String.valueOf(s.charAt(0)),String.valueOf(Character.toUpperCase(s.charAt(0))) );
    

    它抛出了一个异常

    String s = gameList[0].toString();
    char c = Character.toUpperCase(gameList[0].charAt(0));
    gameList[0] = s.subSequence(1, s.length());
    

    rhis one也抛出了一个异常

    4 回复  |  直到 14 年前
        1
  •  9
  •   MartynOfEngland    12 年前

    . . . 或者在一个数组中完成所有操作。这里有一些类似的东西。

        String titleize(String source){
            boolean cap = true;
            char[]  out = source.toCharArray();
            int i, len = source.length();
            for(i=0; i<len; i++){
                if(Character.isWhitespace(out[i])){
                    cap = true;
                    continue;
                }
                if(cap){
                    out[i] = Character.toUpperCase(out[i]);
                    cap = false;
                }
            }
            return new String(out);
        }
    
        2
  •  13
  •   Pentium10    14 年前
    /**
     * returns the string, the first char lowercase
     *
     * @param target
     * @return
     */
    public final static String asLowerCaseFirstChar(final String target) {
    
        if ((target == null) || (target.length() == 0)) {
            return target; // You could omit this check and simply live with an
                           // exception if you like
        }
        return Character.toLowerCase(target.charAt(0))
                + (target.length() > 1 ? target.substring(1) : "");
    }
    
    /**
     * returns the string, the first char uppercase
     *
     * @param target
     * @return
     */
    public final static String asUpperCaseFirstChar(final String target) {
    
        if ((target == null) || (target.length() == 0)) {
            return target; // You could omit this check and simply live with an
                           // exception if you like
        }
        return Character.toUpperCase(target.charAt(0))
                + (target.length() > 1 ? target.substring(1) : "");
    }
    
        3
  •  2
  •   polygenelubricants    14 年前

    字符串不可变时

    String s = gameList[0].toString();
    s.replaceFirst(...);
    

    Java字符串是不可变的。不能在字符串实例上调用方法并期望该方法修改该字符串。 replaceFirst 而是返回 新的 字符串。这意味着这些用法是错误的:

    s1.trim();
    s2.replace("x", "y");
    

    相反,你应该这样做:

    s1 = s1.trim();
    s2 = s2.replace("x", "y");
    

    至于改变一个字母的第一个字母 CharSequence 对于大写字母,类似的东西是有效的( as seen on ideone.com ):

        static public CharSequence upperFirst(CharSequence s) {
            if (s.length() == 0) {
                return s;
            } else {
                return Character.toUpperCase(s.charAt(0))
                    + s.subSequence(1, s.length()).toString();
            }
        }
        public static void main(String[] args) {
            String[] tests = {
                "xyz", "123 abc", "x", ""
            };
            for (String s : tests) {
                System.out.printf("[%s]->[%s]%n", s, upperFirst(s));
            }
            // [xyz]->[Xyz]
            // [123 abc]->[123 abc]
            // [x]->[X]
            // []->[]
    
            StringBuilder sb = new StringBuilder("blah");
            System.out.println(upperFirst(sb));
            // prints "Blah"
        }
    

    NullPointerException 如果 s == null . 这通常是一种适当的行为。

        4
  •  0
  •   Herrera    11 年前

    我喜欢对名称使用这个更简单的解决方案,其中toUp是一个由(“”)分隔的全名数组:

    for (String name : toUp) {
        result = result + Character.toUpperCase(name.charAt(0)) + 
                 name.substring(1).toLowerCase() + " ";
    }
    

    这个修改后的解决方案只能用于大写完整字符串的第一个字母,同样,toUp是一个字符串列表:

    for (String line : toUp) {
        result = result + Character.toUpperCase(line.charAt(0)) + 
                 line.substring(1).toLowerCase();
    }
    

    希望这有帮助。