Изменение первой буквы CharSequence в верхнем регистре в android

Это может показаться простым, но у него много ошибок, которые я пробовал следующим образом:

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 также выбрасывает исключение

Solutions Collecting From Web of "Изменение первой буквы CharSequence в верхнем регистре в android"

, , , Или сделать все это в массиве. Вот что-то похожее.

  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); } 
 /** * 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) : ""); } 

На Строке, неизменяемой

Что касается вашей первой попытки:

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

Строки Java неизменяемы. Вы не можете вызвать метод в экземпляре строки и ожидать, что метод изменит эту строку. replaceFirst вместо этого возвращает новую строку. Это означает, что эти виды использования неверны:

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

Вместо этого вы хотите сделать что-то вроде этого:

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

Что касается изменения первой буквы CharSequence в верхнем регистре, что-то вроде этого работает ( как видно на 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 . Это часто является подходящим поведением.

Мне нравится использовать это более простое решение для имен, где 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(); } 

Надеюсь это поможет.