web-dev-qa-db-ja.com

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

私はユーザーから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()を呼び出すことはできません

221
sumithra
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);
}
314
Rekin
173
Bozho

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

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

nameの値は"Stackoverflow"です

65
Elenasys

Apacheの共通ライブラリを使用してください。これらのものからあなたの脳を解放し、Null PointerとIndex Out of Bound Exceptionsを回避する

ステップ1:

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

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

ステップ2:

あなたの文字列がすべて小文字であること、あるいはあなたが最初の文字を初期化することだけが必要であることが確実であるならば、直接に電話をしてください。

StringUtils.capitalize(yourString);

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

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もこのライブラリに含まれていますが、非推奨です。 使わないでください

36
Fangming

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

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);
20
Grodriguez
14
Zaki

以下の解決策はうまくいくでしょう。

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

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

11

WordUtils.capitalize(str) を使用してください。

8
Suresh Kumar

Javaユーザーの場合

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

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

その後はstr = capitalize(str)を呼び出してください。

Kotlinユーザーのために単に電話してください:

str.capitalize()

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

    userName = userName.toLowerCase();

それから最初の文字を大文字にする:

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

部分文字列は単により大きな文字列の一部を取得しているだけなので、それらを組み合わせています。

6
AlexZeCoder

最短も:

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

私のために働きました。

5
Dassi Orleando
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
5
Aditya Parmar

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);
    }
}
5
Arpit

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
Michael

これを行うには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
JDJ

これを試してください

この方法で何ができるかということは、「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();

    }
3
Ameen Maheen
Use this utility method to get all first letter in capital. 


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);
    }
3
Krrish

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

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
Vimukthi_R

次のコードを使うことができます。

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
Mulalo Madida

これは単にあなたにそれを見せることです、あなたはそれほど間違っていなかったということです。

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に示すためだけのものです。 ;)

3
Adeel Ansari

ACL WordUtilsを見てください。

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

Wordの最初の文字をすべて大文字にするにはどうすればよいですか?

2
Manoj Ekanayaka
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
Doc Brown

これも試すことができます。

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

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

2
jerjer

これはうまくいくでしょう

char[] array = value.toCharArray();

array[0] = Character.toUpperCase(array[0]);

String result = new String(array);
2
System.out.println(Character.toString(A.charAt(0)).toUpperCase()+A.substring(1));

P.S = aは文字列です。

1
Germa Vinsmoke

次のコードを使うことができます。

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

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

最初に、あなたは以下のようにsplitメソッドを使用してスペースがあるこの分割文字列のためにその文字列&の各単語を取得し、それぞれの単語を配列に格納する必要があります。次に空の文字列を作成します。その後substring()メソッドを使用して、対応するWordの最初の文字と残りの文字を取得し、それらを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
     }
}
1
Dcoder

私が投稿したコードでは、文字列からアンダースコア(_)記号と余分なスペースが削除され、文字列内のすべての新しいWordの最初の文字が大文字になります。

private String capitalize(String txt){ 
  List<String> finalTxt=new ArrayList<>();

  if(txt.contains("_")){
       txt=txt.replace("_"," ");
  }

  if(txt.contains(" ") && txt.length()>1){
       String[] tSS=txt.split(" ");
       for(String tSSV:tSS){ finalTxt.add(capitalize(tSSV)); }  
  }

  if(finalTxt.size()>0){
       txt="";
       for(String s:finalTxt){ txt+=s+" "; }
  }

  if(txt.endsWith(" ") && txt.length()>1){
       txt=txt.substring(0, (txt.length()-1));
       return txt;
  }

  txt = txt.substring(0,1).toUpperCase() + txt.substring(1).toLowerCase();
  return txt;
}
1
Shehroz

答えの1つは95%正解でしたが、私のunitTestで失敗しました@Ameen Maheenの解決策はほぼ完璧でした。ただし、入力が文字列配列に変換される前に、入力をトリミングする必要があります。だから完璧なもの:

private String convertStringToName(String name) {
        name = name.trim();
        String[] words = name.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();
    }
1
crix

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

static String toTitle (String s) {
      String s1 = s.substring(0,1).toUpperCase();
      String sTitle = s1 + s.substring(1);
      return sTitle;
 }
1
Nooblhu

一つのアプローチ.

String input = "someТекст$T%$4čřЭ"; //Enter your text.
if (input == null || input.isEmpty()) {
    return "";
}

char [] chars = input.toCharArray();
chars[0] = chars[0].toUpperCase();
String res = new String(chars);
return res;

このメソッドの欠点は、inputStringが長い場合、そのような長さのオブジェクトが3つあることです。あなたと同じ

String s1 = input.substring(1).toUpperCase();
String s2 = input.substring(1, lenght);
String res = s1 + s2;

あるいは

//check if not null.
StringBuilder buf = new StringBuilder(input);
char ch = buf.getCharAt(0).toUpperCase();
buf.setCharAt(0, ch);
return buf.toString();
0
Yan Khonski

置換方法を使用してください。

String newWord = Word.replace(String.valueOf(Word.charAt(0)), String.valueOf(Word.charAt(0)).toUpperCase());
0
Engine
public void capitalizeFirstLetter(JTextField textField) {

    try {

        if (!textField.getText().isEmpty()) {
            StringBuilder b = new StringBuilder(textField.getText());
            int i = 0;
            do {
                b.replace(i, i + 1, b.substring(i, i + 1).toUpperCase());
                i = b.indexOf(" ", i) + 1;
            } while (i > 0 && i < b.length());
            textField.setText(b.toString());
        }

    } catch (Exception e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
    }
}
0
Suresh

テキスト内の各Wordを大文字にするこのコード!

public String capitalizeText(String name) {
    String[] s = name.trim().toLowerCase().split("\\s+");
    name = "";
    for (String i : s){
        if(i.equals("")) return name; // or return anything you want
        name+= i.substring(0, 1).toUpperCase() + i.substring(1) + " "; // uppercase first char in words
    }
    return name.trim();
}
0
An Van Nguyen

あなたはクラスWordUtilsを使うことができます。

あなたの文字列が "現在の住所"であると仮定し、そして

****強力なテキストWordutils.capitaliz(文字列);出力:現在のアドレス

参照してください: http://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/text/WordUtils.html

0
SANDEEP KIRWAI

あなたはこれを試すことができます

/**
 * capitilizeFirst(null)  -> ""
 * capitilizeFirst("")    -> ""
 * capitilizeFirst("   ") -> ""
 * capitilizeFirst(" df") -> "Df"
 * capitilizeFirst("AS")  -> "As"
 *
 * @param str input string
 * @return String with the first letter capitalized
 */
public String capitilizeFirst(String str)
{
    // assumptions that input parameter is not null is legal, as we use this function in map chain
    Function<String, String> capFirst = (String s) -> {
        String result = ""; // <-- accumulator

        try { result += s.substring(0, 1).toUpperCase(); }
        catch (Throwable e) {}
        try { result += s.substring(1).toLowerCase(); }
        catch (Throwable e) {}

        return result;
    };

    return Optional.ofNullable(str)
            .map(String::trim)
            .map(capFirst)
            .orElse("");
}
0
Roman Gordeev

おかげで私はいくつかのコメントを読みましたそして私は次のようになりました

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

幸運を祈っています

0
Nasser Al kaabi

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を操作できます。

0
velocity

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

Ameen Mahheenからの答えは良いですが、 "hello world"のように二重のスペースを持つ文字列がある場合、sb.appendはIndexOutOfBounds Exceptionを取得します。やるべき正しいことは、この行の前にテステすることです。

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

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

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)));
0
Aleksey Bykov
class CapitalizeWords
{
    public static void main(String[] args) 
    {
        String input ="welcome to kashmiri geeks...";

        System.out.println(input);

        String[] str = input.split(" ");

        for(int i=0; i< str.length; i++)
        {
            str[i] = (str[i]).substring(0,1).toUpperCase() + (str[i]).substring(1);
        }

        for(int i=0;i<str.length;i++)
        {
            System.out.print(str[i]+" ");
        }


    }
}
0
Maahi bhat

次の例では、[/ - ]などの特殊文字の後の単語も大文字にします。

  public static String capitalize(String text) {
    char[] stringArray = text.trim().toCharArray();
    boolean wordStarted = false;
    for( int i = 0; i < stringArray.length; i++) {
      char ch = stringArray[i];
      if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '\'') {
        if( !wordStarted ) {
          stringArray[i] = Character.toUpperCase(stringArray[i]);
          wordStarted = true;
        } 
      } else {
        wordStarted = false;
      }
    }
    return new String(stringArray);
  }

Example:
capitalize("that's a beautiful/wonderful life we have.We really-do")

Output:
That's A Beautiful/Wonderful Life We Have.We Really-Do
0
Delorean

InputがUpperCaseの場合は、以下を使用してください。

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

InputがLowerCaseの場合は、以下を使用してください。

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

0
Raj Kumar
import Java.util.*;
public class Program
{
    public static void main(String[] args) 
      {
        Scanner sc=new Scanner(System.in);
        String s1=sc.nextLine();
        String[] s2=s1.split(" ");//***split text into words***
        ArrayList<String> l = new ArrayList<String>();//***list***
        for(String w: s2)
        l.add(w.substring(0,1).toUpperCase()+w.substring(1)); 
        //***converting 1st letter to capital and adding to list***
        StringBuilder sb = new StringBuilder();//***i used StringBuilder to convert words to text*** 
        for (String s : l)
          {
             sb.append(s);
             sb.append(" ");
          }
      System.out.println(sb.toString());//***to print output***
      }
}

私は分割関数を使用して文字列を単語に分割し、再びその単語の最初の文字の大文字を取得するためにリストを取得し、文字列ビルダーを使用して、スペースを含む文字列形式で出力を印刷しました

0
Sindhu Adapa
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));
0
emre hamurcu