2013-06-10 2 views
23

В настоящее время я использую этот код, чтобы сделать свое первое письмо в струнном капиталеСделать Строку первой прописную буквы в Java

String output = input.substring(0, 1).toUpperCase() + input.substring(1); 

Это кажется очень грязно мне ..is там любой прямой или элегантный способ ..

+4

[StringUtils.capitalize()] (http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#capitalize%28java.lang .String% 29)? Ищете элегантность на Java ... ну, есть лучшие ROI. Утилитные библиотеки существуют по какой-то причине. –

+0

Вам нужно рассмотреть локаль? Каждый язык имеет разные правила для изменения букв. – erickson

+0

@erickson Нет необходимости. Мне достаточно английского языка. –

ответ

27

Вы должны взглянуть на StringUtils класс от Apache Commons Lang Lib - это есть метод .capitalize()

Описание от Lib:

Заглавная строка, изменяющая первую букву в заголовок в соответствии с Character.toTitleCase (char). Никакие другие буквы не изменяются.

+6

Downvoters, пожалуйста, прокомментируйте причину downvote. – user

+0

Обратите внимание, что если вы хотите использовать только первую букву (например, для форматирования имени), вам может потребоваться заполнить всю строку до запуска заглавной буквы, если вы подозреваете, что в вашей строке уже есть кепки. От JavaDoc: StringUtils.capitalize ("cAt") = "CAt" –

+0

Заглавная буква будет использовать первую букву каждого слова, а не только первое – FrankMonza

49

Как об этом:

String output = Character.toUpperCase(input.charAt(0)) + input.substring(1); 

Я не могу думать ни о чем более чистого, без использования внешних библиотек, но это, безусловно, лучше, чем то, что вы в настоящее время.

+2

Я думаю, что Марко имел в виду, что "" или null не удастся; StringUtils.capitalize не подведет. –

+2

@JoopEggen Это имеет то же поведение, что и исходный код OP, тогда как 'StringUtils.capitalize' не работает. – arshajii

+3

Даун-избиратели, пожалуйста, оставляйте комментарий. – arshajii

0
public static void main(String[] args) { 
    String str = null; 
    String outStr = null; 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a String: "); 
    str = sc.nextLine(); 
    //c= Character.toUpperCase(str.charAt(0)); 

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

     if(str.charAt(i)==' '){ 

      outStr= outStr.substring(0,i+1)+str.substring(i+1,i+2).toUpperCase()+str.substring(i+2); 

     }else if(i==0){ 

      outStr=str.substring(0,1).toUpperCase()+str.substring(1); 

     } 
    } 
    System.out.println("STRING::"+outStr); 
} 
+0

Если я ввешу строку типа '_123' (начиная с пробела), она выдает« NullPointerException ». Ваш ответ кажется также немного сложным по сравнению с другими. – pzaenger

+0

ну, не только это, моя программа также должна выбрасывать исключение NullPointerException, если вы добавите пробел в конец. Я не делал эти проверки, вы можете использовать регулярное выражение, если хотите ...Я просто дал скелет о том, как это можно реализовать. – Anubhav

-1
class strDemo3 
{ 
    public static void main(String args[]) 
    { 
     String s1=new String(" the ghost of the arabean sea"); 
     char c1[]=new char[30];  
     int c2[]=new int[30]; 
     s1.getChars(0,28,c1,0); 
     for(int i=0;i<s1.length();i++) 
     { 
      System.out.print(c1[i]); 
     } 
     for(int i=1;i<s1.length();i++) 
     { 
      c2[i]=c1[i]; 
      if(c1[i-1]==' ') 
      { 
       c2[i]=c2[i]-32; 
      } 
      c1[i]=(char)c2[i];   
     } 
     for(int i=0;i<s1.length();i++) 
     { 
      System.out.print(c1[i]); 
     }    
     } 
} 
+1

Пожалуйста, не просто отправляйте код, который может быть непонятен OP. Объясните свой ответ шаг за шагом и дайте совет. – mastov

+0

Теперь мой код выглядит более красивым :) Спасибо за ответ. –

2
String out = Character.toUpperCase(inText.charAt(0)) + inText.substring(1).toLowerCase(); 
0

Предполагая, что вы можете использовать Java 8, вот функциональный способ, которым никто не просил ...

import java.util.Optional; 
import java.util.stream.IntStream; 

public class StringHelper { 
    public static String capitalize(String source) { 
     return Optional.ofNullable(source) 
      .map(str -> IntStream.concat(
       str.codePoints().limit(1).map(Character::toUpperCase), 
       str.codePoints().skip(1))) 
      .map(stream -> stream.toArray()) 
      .map(arr -> new String(arr, 0, arr.length)) 
      .orElse(null); 
    } 
} 

Это элегантный в том, что он обрабатывает нулевые и пустые дела строки без каких-либо условных утверждений.

0
Character.toString(a.charAt(0)).toUpperCase()+a.substring(1) 

P.S = a - это строка.

Смежные вопросы