Javaで文字列の最初の文字を大文字にする方法は?


305

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

私はこれを試しました:

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()を呼び出すことはできません


2
@ポンタス-同意しない。入力「abcd」の場合、OPは出力「Abcd」を必要とします。質問はもっと良かったかもしれませんが、それはかなり明確に見えます。
コビ


文字はJavaのプリミティブデータ型です。dot(。)演算子を使用してプリミティブデータ型を逆参照することはできません。最初の文字をname.substring(0,1);でサブストリング化する必要があります。
Divakar Rajesh 2018

回答:


397
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);
}

1
str.length()の後に-1が必要だと思います。そうしないと範囲外になります。
ダット

@ダット:いいえ、実際にはそれで十分でした。しかし、Rekinの修正により完璧になりました。;)
Adeel Ansari

commons langは、自分がよく知っているまれなケースを除いて、常に独自の関数を記述するよりも優れています。capitalize関数のcommons lang java docを読んでいないのであれば、自分で書くべきではありません。
The.Laughing.Man

211

私はWordUtilsを使用していましたが、これも同じ機能を持っていますが、文中のすべての単語の最初の文字を大文字にします。
Surbhit Rao、

StringUtils.capitalize( "fred from jupiter" );を生成し"Fred from jupiter"ます。簡単...:D
udoline

WordUtils.capitalizeFully()は魅力のように私のために機能しました:WordUtils.capitalizeFully( "i am FINE")= "I Am Fine"
Atul Sharma

91

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

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

の値name"Stackoverflow"


4
文字列の残りの部分が確実に小文字になるので、この解決策が好きです。これが、ALL_CAPS列挙名から変換するときに必要なものです。
Ellen Spertus、2015年

54

Apacheの共通ライブラリを使用します。これらのものからあなたの脳を解放し、Nullポインターと範囲外の例外を回避する

ステップ1:

これをbuild.gradle依存関係に入れて、Apacheの共通langライブラリをインポートします

compile 'org.apache.commons:commons-lang3:3.6'

ステップ2:

文字列がすべて小文字であるか、最初の文字を初期化するだけでよい場合は、直接呼び出します

StringUtils.capitalize(yourString);

最初の文字だけが大文字であるようにしたい場合、たとえばに対してこれを行う場合はenumtoLowerCase()最初に呼び出してNullPointerException、入力文字列がnullの場合にスローされることに注意してください。

StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

Apacheが提供するその他のサンプルを以下に示します。例外はありません

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

注意:

WordUtilsもこのライブラリに含まれていますが、非推奨です。使用しないでください。


2
ありがとう。私は人々も、タスクのこの種のループのために使用して考える信じることができない
アルバロ

@Alvaro、結局のところ、人々はこのタスクにループを使用しています。Apacheのソースコードを確認してください。これは、十分にテストされたソリューションを使用すべきではないという意味ではありません。
Yuriy Chernyshov

@YuriyChernyshov確かに、私は彼らがプロダクションコードの大部分を再発明するべきではないことを意味しました
Alvaro

WordUtils.capitalizeFully()は、魅力のように私に役立ちました:WordUtils.capitalizeFully( "i am FINE")= "I Am Fine"
Atul Sharma

のような小さな目的のためだけに、外部ライブラリを使用することはありませんHow to capitalize the first letter of a String in Java?
スタックオーバーフロー

25

Java:

すべての文字列を大文字にするヘルパーメソッドです。

public static String capitalize(String str)
{
    if(str == null) return str;
    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

その後、単に呼び出します str = capitalize(str)


コトリン:

str.capitalize()

strがnullの場合、例外がスローされます。これを使用する前に、文字列がnullではなく、少なくとも1文字あることを確認してください。
attacomsian

@attacomsianあなたは正しい、私はJavaコードを更新し、Kotlinの場合はstr?.capitalize()を使用できます
Amir Hossein

22

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

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);


12

以下の解決策が機能します。

String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow

プリミティブcharでtoUpperCase()を使用することはできませんが、最初に文字列全体を大文字にしてから、最初の文字を取得してから、上記のように部分文字列に追加できます。


問題のtoUpperCaseは制限されています。
Harpreet Sandhu-TheRootCoder 2018年

問題は、動作しないプリミティブでtoUpperCaseを実行しようとしていたことです。
ジジルカッカダトゥ18年

1
ああ。私はそれを逃した。(y)
Harpreet Sandhu-TheRootCoder 2018年

1
すばらしい回答です
Dulaj Kulathunga


7

最短も:

String message = "my message";    
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message)    // Will output: My message

私のために働いた。


6

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

    userName = userName.toLowerCase();

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

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

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


7
文字列の残りの部分はいずれにしても小文字に設定されているため、コードの最初の行である私がそれを取得する方法は役に立ちません。
HåvardNygårdの

6

何について)(WordUtils.capitalizeFully

import org.apache.commons.lang3.text.WordUtils;

public class Main {

    public static void main(String[] args) {

        final String str1 = "HELLO WORLD";
        System.out.println(capitalizeFirstLetter(str1)); // output: Hello World

        final String str2 = "Hello WORLD";
        System.out.println(capitalizeFirstLetter(str2)); // output: Hello World

        final String str3 = "hello world";
        System.out.println(capitalizeFirstLetter(str3)); // output: Hello World

        final String str4 = "heLLo wORld";
        System.out.println(capitalizeFirstLetter(str4)); // output: Hello World
    }

    private static String capitalizeFirstLetter(String str) {
        return WordUtils.capitalizeFully(str);
    }
}

6

このユーティリティメソッドを使用して、すべての最初の文字を大文字にします。

String captializeAllFirstLetter(String name) 
{
    char[] array = name.toCharArray();
    array[0] = Character.toUpperCase(array[0]);

    for (int i = 1; i < array.length; i++) {
        if (Character.isWhitespace(array[i - 1])) {
            array[i] = Character.toUpperCase(array[i]);
        }
    }

    return new String(array);
}


4

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

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

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


4

使用できます 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()ためtoLowerCase()、を指定する必要はありません。


4

Android Studio内

この依存関係を build.gradle (Module: app)

dependencies {
    ...
    compile 'org.apache.commons:commons-lang3:3.1'
    ...
}

今、あなたは使うことができます

String string = "STRING WITH ALL CAPPS AND SPACES";

string = string.toLowerCase(); // Make all lowercase if you have caps

someTextView.setText(WordUtils.capitalize(string));

4

SPRINGを使用する場合:

import static org.springframework.util.StringUtils.capitalize;
...


    return capitalize(name);

注:すでにApache Common Lang依存関係がある場合は、他の回答が示唆しているように、それらのStringUtils.capitalizeの使用を検討してください。

実装: https : //github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java#L535-L555

REF: https : //docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#capitalize-java.lang.String-


4

それはうまくいく101%

public class UpperCase {

    public static void main(String [] args) {

        String name;

        System.out.print("INPUT: ");
        Scanner scan = new Scanner(System.in);
        name  = scan.next();

        String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
        System.out.println("OUTPUT: " + upperCase); 

    }

}

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));

注: これは、最善の方法ではありません。これは、OPを使用charAt()して実行できることを示すためだけのものです。;)


1
+1は「それほど間違っていない」ことを意味します。私は考え好む Character.toString(name.charAt(0))の代わりに、""+name.charAt(0)私が本当にやりたいことを示すために。
user85421

NULLの長さのチェックはありません。長さがゼロになる可能性があります。
Chrispix


3

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

public static void main(String[] args) {

    capitalizeFirstLetter("java");
    capitalizeFirstLetter("java developer");
}

public static void capitalizeFirstLetter(String text) {

    StringBuilder str = new StringBuilder();

    String[] tokens = text.split("\\s");// Can be space,comma or hyphen

    for (String token : tokens) {
        str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
    }
    str.toString().trim(); // Trim trailing space

    System.out.println(str);

}

3

これを試して

このメソッドが行うことは、「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();

    }

しかし、このコードはかなり理解しやすいようです、すべてのメソッドは名前によっても簡単に理解できます。
Ameen Maheen 2015

魅力的な作品!
TheVinceble 2017

3

与えられた答えは、1つの単語の最初の文字だけを大文字にすることです。次のコードを使用して、文字列全体を大文字にします。

public static void main(String[] args) {
    String str = "this is a random string";
    StringBuilder capitalizedString = new StringBuilder();
    String[] splited = str.trim().split("\\s+");

    for (String string : splited) {         
        String s1 = string.substring(0, 1).toUpperCase();
        String nameCapitalized = s1 + string.substring(1);

        capitalizedString.append(nameCapitalized);
        capitalizedString.append(" ");
    }
    System.out.println(capitalizedString.toString().trim());
}

出力: This Is A Random String


3

入力がUpperCaseの場合は、次を使用します。

str.substring(0、1).toUpperCase()+ str.substring(1).toLowerCase();

入力がLowerCaseの場合は、以下を使用します。

str.substring(0、1).toUpperCase()+ str.substring(1);



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();
}

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

2

commons.lang.StringUtilsベストアンサーを使用すると、次のようになります。

public static String capitalize(String str) {  
    int strLen;  
    return str != null && (strLen = str.length()) != 0 ? (new StringBuffer(strLen)).append(Character.toTitleCase(str.charAt(0))).append(str.substring(1)).toString() : str;  
}

文字列をStringBufferでラップしているので、すばらしいと思います。同じインスタンスを使用して、必要に応じてStringBufferを操作できます。


2

さらに別の例として、ユーザー入力の最初の文字を大文字にする方法を次に示します。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
// handle supplementary characters
IntStream.concat(
        IntStream.of(string.codePointAt(0))
                .map(Character::toUpperCase), string.codePoints().skip(1)
)
.forEach(cp -> System.out.print(Character.toChars(cp)));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.