Hoe de eerste letter van een tekenreeks in Java met een hoofdletter te schrijven?

Ik gebruik Java om een Stringinvoer van de gebruiker te krijgen. Ik probeer de eerste letter van deze invoer met een hoofdletter te schrijven.

Ik heb dit geprobeerd:

String name;
BufferedReader br = new InputStreamReader(System.in);
String s1 = name.charAt(0).toUppercase());
System.out.println(s1 + name.substring(1));

wat leidde tot deze compilerfouten:

  • Type komt niet overeen: kan niet converteren van InputStreamReader naar BufferedReader

  • Kan toUppercase() niet aanroepen op het primitieve type char


Antwoord 1, autoriteit 100%

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

Met jouw voorbeeld:

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

Antwoord 2, autoriteit 56%

StringUtils.capitalize(..)van commons-lang


Antwoord 3, autoriteit 24%

De kortere / snellere versie-code om de eerste letter van een string te kapitaliseren is:

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

De waarde van nameis "Stackoverflow"


Antwoord 4, Autoriteit 16%

Gebruik de gemeenschappelijke bibliotheek van Apache. Maak je hersenen uit deze spullen en vermijd null Pointer & AMP; Index Out of Bound Exceptions

Stap 1:

Importeer de gemeenschappelijke Lang-bibliotheek van Apache door dit in build.gradleafhankelijkheden

te plaatsen

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

Stap 2:

Als u zeker weet dat uw string alle kleine letters is, of alles wat u nodig heeft, is het initialiseren van de eerste letter, rechtstreeks

StringUtils.capitalize(yourString);

Als u ervoor wilt zorgen dat alleen de eerste letter wordt geactiveerd, zoals dit doen voor een enum, bel toLowerCase()eerst en houd er rekening mee dat het zal doen Gooi NullPointerExceptionAls de invoerreeks null is.

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

Hier zijn meer monsters aangeboden door Apache. Het is gratis

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

Opmerking:

WordUtilsis ook opgenomen in deze bibliotheek, maar is verouderd. Gebruik dat alsjeblieft niet.


Antwoord 5, autoriteit 7%

Java:

gewoon een hulpmethode om elke tekenreeks met een hoofdletter te schrijven.

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

Bel daarna gewoon str = capitalize(str)


Kotlin:

str.capitalize()

Antwoord 6, autoriteit 5%

Wat u wilt doen is waarschijnlijk dit:

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

(converteert eerste char naar hoofdletters en voegt de rest van de originele string toe)

U maakt ook een invoerstroomlezer, maar leest nooit een regel. Dus namezal altijd nullzijn.

Dit zou moeten werken:

BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);

Antwoord 7, autoriteit 4%

als je SPRINGgebruikt:

import static org.springframework.util.StringUtils.capitalize;
...
    return capitalize(name);

IMPLEMENTATIE:org/springframework/util/StringUtils.java#L535-L555

REF:javadoc-api/org/springframework/util/StringUtils.html#capitalize


OPMERKING:Als je al Apache Common Lang-afhankelijkheid hebt, overweeg dan om hun StringUtils.capitalize te gebruiken, zoals andere antwoorden suggereren.


Antwoord 8, autoriteit 4%

WordUtils.capitalize(java.lang.String)van Apache Commons.


Antwoord 9, autoriteit 3%

De onderstaande oplossing werkt.

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

Je kunt toUpperCase() niet gebruiken op primitieve char , maar je kunt de hele String eerst naar hoofdletters maken, dan de eerste char nemen en vervolgens toevoegen aan de substring zoals hierboven weergegeven.


Antwoord 10, autoriteit 2%

Gebruik WordUtils.capitalize(str).


Antwoord 11, autoriteit 2%

String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);

Antwoord 12

Stel de tekenreeks in op kleine letters en stel de eerste letter als volgt in op de hoogste:

   userName = userName.toLowerCase();

vervolgens om de eerste letter met een hoofdletter te schrijven:

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

substring krijgt gewoon een stuk van een grotere string, dan combineren we ze weer samen.


Antwoord 13

Ook het kortst:

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

Werkte voor mij.


Antwoord 14

Gebruik deze hulpprogrammamethode om alle eerste letters in hoofdletters te krijgen.

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

Antwoord 15

HET ZAL 101% WERKEN

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

Antwoord 16

Hoe zit het met 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);
    }
}

Antwoord 17

U kunt hiervoor substring()gebruiken.

Maar er zijn twee verschillende gevallen:

Geval 1

Als de Stringdie u met een hoofdletter schrijft bedoeld is om door mensen gelezen te worden, moet u ook de standaardlandinstelling specificeren:

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

Geval 2

Als de Stringdie u met een hoofdletter schrijft bedoeld is om door een machine te worden gelezen, vermijd dan het gebruik van Locale.getDefault()omdat de string die wordt geretourneerd in verschillende regio’s inconsistent zal zijn , en geef in dit geval altijd dezelfde landinstelling op (bijvoorbeeld toUpperCase(Locale.ENGLISH)). Dit zorgt ervoor dat de strings die u gebruikt voor interne verwerking consistent zijn, wat u zal helpen moeilijk te vinden bugs te voorkomen.

Opmerking: u hoeft Locale.getDefault()niet op te geven voor toLowerCase(), omdat dit automatisch wordt gedaan.


Antwoord 18

In Android Studio

Voeg deze afhankelijkheid toe aan uw build.gradle (Module: app)

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

Nu kunt u

String string = "STRING WITH ALL CAPPS AND SPACES";
string = string.toLowerCase(); // Make all lowercase if you have caps
someTextView.setText(WordUtils.capitalize(string));

Antwoord 19

Je kunt ook dit proberen:

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

Dit is beter (geoptimaliseerd) dan bij het gebruik van substring. (maar maak je geen zorgen over een klein touwtje)


Antwoord 20

probeer deze

Wat deze methode doet, is dat, Beschouw het woord “hallo wereld”, deze methode het in “Hallo wereld” verandert, het begin van elk woord met een hoofdletter schrijft.

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

Antwoord 21

De huidige antwoorden zijn onjuist of maken deze eenvoudige taak te ingewikkeld. Na wat onderzoek te hebben gedaan, zijn hier twee benaderingendie ik bedenk met:

1. String’s substring()methode

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

Voorbeelden:

System.out.println(capitalize("java")); // Java
System.out.println(capitalize("beTa")); // BeTa
System.out.println(capitalize(null)); // null

2. Apache Commons Lang

De Apache Commons Lang-bibliotheek biedt StringUtilsde klasse voor dit doel:

System.out.println(StringUtils.capitalize("apache commons")); // Apache commons
System.out.println(StringUtils.capitalize("heLLO")); // HeLLO
System.out.println(StringUtils.uncapitalize(null)); // null

Vergeet niet de volgende afhankelijkheid toe te voegen aan uw pom.xml-bestand:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

Antwoord 22

Eenvoudige oplossing! vereist geen externe bibliotheek, het kan lege of één letterreeks aan.

private String capitalizeFirstLetter(@NonNull  String str){
        return str.length() == 0 ? str
                : str.length() == 1 ? str.toUpperCase()
                : str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
}

Antwoord 23

Hier is mijn gedetailleerde artikel over het onderwerp voor alle mogelijke opties Eerste letter van de tekenreeks in Android met hoofdletters

Methode om de eerste letter van de tekenreeks in Java met een hoofdletter te schrijven

public static String capitalizeString(String str) {
        String retStr = str;
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
        }catch (Exception e){}
        return retStr;
}

Methode om de eerste letter van de tekenreeks in KOTLIN met een hoofdletter te schrijven

fun capitalizeString(str: String): String {
        var retStr = str
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
        } catch (e: Exception) {
        }
        return retStr
}

Antwoord 24

Dit is alleen om je te laten zien dat je niet zo verkeerd was.

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

Opmerking:Dit is helemaal niet de beste manier om het te doen. Dit is alleen om de OP te laten zien dat het ook gedaan kan worden met charAt(). 😉


Antwoord 25

Dit zal werken

char[] array = value.toCharArray();
array[0] = Character.toUpperCase(array[0]);
String result = new String(array);

Antwoord 26

U kunt de volgende code gebruiken:

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

Antwoord 27

Gezien antwoorden is voor het gebruik van de eerste letter van één woord. Gebruik de volgende code om een ​​hele reeks te profiteren.

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

Uitgang:
This Is A Random String


Antwoord 28

Als de invoer hoofdletters is, gebruikt u het volgende:

Str.Substring (0, 1) .touppercase () + Str.Substring (1). ToLowerCase ();

Als ingang kleine letters is, gebruikt u het volgende:

Str.Substring (0, 1) .touppercase () + str.substring (1);


Antwoord 29

Gebruik commons.lang.StringUtilsHet beste antwoord is:

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

Ik vind het briljant omdat het de tekenreeks met een stringbuffer wikkelt. U kunt de stringbuffer manipuleren zoals u wilt en hoewel het gebruik van hetzelfde exemplaar.


ANTWOORD 30

om eerste letter hoofdletter en andere wil te krijgen, kunt u onderstaande code gebruiken. Ik heb gedaan via de substringfunctie.

String currentGender="mAlE";
    currentGender=currentGender.substring(0,1).toUpperCase()+currentGender.substring(1).toLowerCase();

Hier zet substring(0,1).toUpperCase() de eerste letter om als hoofdletter en substring(1).toLowercase() converteert u alle resterende letters naar een kleine letter.

OUTPUT:

Man

Other episodes