427

Java を使用Stringしてユーザーからの入力を取得しています。この入力の最初の文字を大文字にしようとしています。

私はこれを試しました:

String name;

BufferedReader br = new InputStreamReader(System.in);

String s1 = name.charAt(0).toUppercase());

System.out.println(s1 + name.substring(1));

これらのコンパイラエラーにつながりました:

  • タイプの不一致: InputStreamReader から BufferedReader に変換できません

  • プリミティブ型 char で toUppercase() を呼び出せません

4

59 に答える 59

502
String str = "java";
String cap = str.substring(0, 1).toUpperCase() + str.substring(1);
// cap = "Java"

あなたの例では:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // Actually use the Reader
    String name = br.readLine();
    // Don't mistake String object with a Character object
    String s1 = name.substring(0, 1).toUpperCase();
    String nameCapitalized = s1 + name.substring(1);
    System.out.println(nameCapitalized);
}
于 2010-10-11T08:27:09.717 に答える
288

StringUtils.capitalize(..)コモンズ言語 から

于 2010-10-11T08:29:37.560 に答える
120

文字列の最初の文字を大文字にする短い/高速なバージョン コードは次のとおりです。

String name  = "stackoverflow"; 
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

の値name"Stackoverflow"

于 2014-11-05T22:51:36.520 に答える
24

あなたがやりたいことはおそらくこれです:

s1 = name.substring(0, 1).toUpperCase() + name.substring(1);

(最初の文字を大文字に変換し、元の文字列の残りを追加します)

また、入力ストリーム リーダーを作成しますが、どの行も読み取りません。したがってname、常に になりますnull

これはうまくいくはずです:

BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
于 2010-10-11T08:38:57.407 に答える
17

WordUtils.capitalize(java.lang.String)Apache Commonsから。

于 2010-10-11T08:32:29.247 に答える
10

を使用しWordUtils.capitalize(str)ます。

于 2010-10-11T08:33:14.137 に答える
8

文字列を小文字に設定し、次のように最初の文字を大文字に設定します。

    userName = userName.toLowerCase();

次に、最初の文字を大文字にします。

    userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();

部分文字列は、より大きな文字列の一部を取得しているだけで、それらを結合して戻しています。

于 2016-06-03T15:49:07.353 に答える
5

これを試すこともできます:

 String s1 = br.readLine();
 char[] chars = s1.toCharArray();
 chars[0] = Character.toUpperCase(chars[0]);
 s1= new String(chars);
 System.out.println(s1);

これは、部分文字列を使用するよりも優れています (最適化されています)。(ただし、小さな紐では心配ありません)

于 2010-10-11T08:44:11.740 に答える
5

これを行うために使用できますsubstring()

ただし、次の 2 つの異なるケースがあります。

ケース1

String大文字を使用して人間が判読できるようにする場合は、デフォルトのロケールも指定する必要があります。

String firstLetterCapitalized = 
    myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);

ケース 2

String大文字を使用している が機械可読であることを意図している場合は、使用を避けてくださいLocale.getDefault()。返される文字列が異なる地域間で矛盾するためです。この場合、常に同じロケール (たとえば、toUpperCase(Locale.ENGLISH)) を指定してください。これにより、内部処理に使用している文字列の一貫性が確保され、見つけにくいバグを回避するのに役立ちます。

注:これは自動的に行われるため、Locale.getDefault()forを指定する必要はありません。toLowerCase()

于 2014-06-15T17:07:21.313 に答える
4

これを試してください

このメソッドが行うことは、「hello world」という単語を考えて、このメソッドはそれを「Hello World」に変え、各単語の先頭を大文字にします。

 private String capitalizer(String word){

        String[] words = word.split(" ");
        StringBuilder sb = new StringBuilder();
        if (words[0].length() > 0) {
            sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase());
            for (int i = 1; i < words.length; i++) {
                sb.append(" ");
                sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase());
            }
        }
        return  sb.toString();

    }
于 2015-07-07T05:11:41.603 に答える
3

これは、あなたがそれほど間違っていなかったことを示すためです。

BufferedReader br = new InputstreamReader(System.in);
// Assuming name is not blank
String name = br.readLine(); 

//No more error telling that you cant convert char to string
String s1 = (""+name.charAt(0)).toUppercase());
// Or, as Carlos prefers. See the comments to this post.
String s1 = Character.toString(name.charAt(0)).toUppercase());

System.out.println(s1+name.substring(1));

注: これは最善の方法ではありません。charAt()これは、同様に使用できるOPを示すためのものです。;)

于 2010-10-11T08:53:23.447 に答える
2
public static String capitalizer(final String texto) {

    // split words
    String[] palavras = texto.split(" ");
    StringBuilder sb = new StringBuilder();

    // list of word exceptions
    List<String> excessoes = new ArrayList<String>(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com"));

    for (String palavra : palavras) {

        if (excessoes.contains(palavra.toLowerCase()))
            sb.append(palavra.toLowerCase()).append(" ");
        else
            sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.substring(1).toLowerCase()).append(" ");
    }
    return sb.toString().trim();
}
于 2016-12-21T16:13:42.487 に答える
2

ACL WordUtils を見てください。

WordUtils.capitalize("あなたの文字列") == "あなたの文字列"

文字列内の単語の最初の文字をすべて大文字にする方法は?

于 2015-12-14T05:47:16.203 に答える
2

次のコードを使用できます。

public static String capitalizeString(String string) {

    if (string == null || string.trim().isEmpty()) {
        return string;
    }
    char c[] = string.trim().toLowerCase().toCharArray();
    c[0] = Character.toUpperCase(c[0]);

    return new String(c);

}

JUnit を使用したテスト例:

@Test
public void capitalizeStringUpperCaseTest() {

    String string = "HELLO WORLD  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}

@Test
public void capitalizeStringLowerCaseTest() {

    String string = "hello world  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}
于 2017-01-11T14:38:48.407 に答える
1

文字列内の各単語の最初の文字を大文字にするには、

最初に、以下のように分割メソッドを使用してスペースがあるこの分割文字列について、その文字列の各単語を取得し、各単語を配列に格納する必要があります。次に、空の文字列を作成します。その後、substring() メソッドを使用して、対応する単語の最初の文字と残りの文字を取得し、それらを 2 つの異なる変数に格納します。

次に、 toUpperCase() メソッドを使用して最初の文字を大文字にし、以下のように残りの文字をその空の文字列に追加します。

public class Test {  
     public static void main(String[] args)
     {
         String str= "my name is khan";        // string
         String words[]=str.split("\\s");      // split each words of above string
         String capitalizedWord = "";         // create an empty string

         for(String w:words)
         {  
              String first = w.substring(0,1);    // get first character of each word
              String f_after = w.substring(1);    // get remaining character of corresponding word
              capitalizedWord += first.toUpperCase() + f_after+ " ";  // capitalize first character and add the remaining to the empty string and continue
         }
         System.out.println(capitalizedWord);    // print the result
     }
}
于 2018-03-15T08:01:38.603 に答える
1

文字列の長さに関連するケースがほとんどないため、Jorgesys コードを作り直し、いくつかのチェックを追加しました。私の場合、null参照チェックは行わないでください。

 public static String capitalizeFirstLetter(@NonNull String customText){
        int count = customText.length();
        if (count == 0) {
            return customText;
        }
        if (count == 1) {
            return customText.toUpperCase();
        }
        return customText.substring(0, 1).toUpperCase() + customText.substring(1).toLowerCase();
    }
于 2017-10-11T07:26:49.073 に答える
1

回答の多くは非常に役立つので、それらを使用して、任意の文字列をタイトルに変換するメソッドを作成しました (最初の文字は大文字):

static String toTitle (String s) {
      String s1 = s.substring(0,1).toUpperCase();
      String sTitle = s1 + s.substring(1);
      return sTitle;
 }
于 2016-05-07T09:44:15.057 に答える
0

ありがとうコメントのいくつかを読んで、次のようになりました

public static void main(String args[]) 
{
String myName = "nasser";
String newName = myName.toUpperCase().charAt(0) +  myName.substring(1);
System.out.println(newName );
}

幸運に役立つことを願っています

于 2015-12-13T18:54:26.283 に答える
0

クラス WordUtils を使用できます。

あなたの文字列が「現在の住所」であると仮定してから使用します

****強いテキストWordutils.capitaliz(String); output : 現在の住所

参照: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html

于 2016-11-14T12:33:14.883 に答える
0

Ameen Mahheen からの回答は適切ですが、"hello world" のようにダブル スペースを含む文字列がある場合、sb.append は IndexOutOfBounds Exception を取得します。正しいことは、この行の前に teste を実行して、次のようにします。

private String capitalizer(String word){
        String[] words = word.split(" ");
        StringBuilder sb = new StringBuilder();
        if (words[0].length() > 0) {
            sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase());
            for (int i = 1; i < words.length; i++) {
                sb.append(" ");
                if (words[i].length() > 0) sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase());
            }
        }
        return  sb.toString();
    }
于 2016-04-14T19:40:44.363 に答える
0
String s = "first second third fourth";

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

            if ((s.substring(j, i).endsWith(" "))) {

                String s2 = s.substring(j, i);
                System.out.println(Character.toUpperCase(s.charAt(j))+s2.substring(1));
                j = i;
            }
        }
        System.out.println(Character.toUpperCase(s.charAt(j))+s.substring(j+1));
于 2018-03-12T14:05:22.600 に答える
0
  1. 最初の文字だけを大文字にしたい場合は、次のコードを使用します。

    fun capitalizeFirstLetter(str: String): String {
    return when {
        str.isEmpty() -> str
        str.length == 1 -> str.uppercase(Locale.getDefault())
        else -> str.substring(0, 1)
            .uppercase(Locale.getDefault()) + str.substring(1)
            .lowercase(Locale.getDefault())
    }
    

    }

  2. Sentence の単語の最初の文字をすべて大文字にしたい場合は、次のコードを使用します。

    fun capitalizeEveryFirstLetterOfWordInSentence(str: String): String {
    return when {
        str.isEmpty() -> str
        str.length == 1 -> str.uppercase(Locale.getDefault())
        else -> str
            .lowercase(Locale.getDefault())
            .split(" ")
            .joinToString(" ") { it ->
                it.replaceFirstChar {
                    if (it.isLowerCase()) it.titlecase(Locale.getDefault())
                    else it.toString()
                }
            }.trimEnd()
    }}
    

3.次に、関数を呼び出して、次のように値を渡します。

capitalizeFirstLetter("your String")
capitalizeEveryFirstLetterOfWordInSentence("your String")
于 2022-02-13T10:49:17.347 に答える