Existe-t-il une méthode de conversion de chaîne en cas de titre?

99

Existe-t-il des méthodes intégrées disponibles pour convertir une chaîne au format Title Case?

TylerH
la source
3
Tous ceux qui lisent cette question: sachez que la plupart des réponses les plus votées ici NE FONCTIONNENT PAS CORRECTEMENT pour toutes les langues. Vous avez besoin d'une bibliothèque compatible i18n pour un titrage correct, comme ICU4J (voir la réponse de Daniel F).
sffc

Réponses:

106

Apache Commons StringUtils.capitalize () ou texte commun WordUtils.capitalize ()

par exemple: à WordUtils.capitalize("i am FINE") = "I Am FINE"partir de la documentation WordUtils

aberrant80
la source
14
WordUtils.capitalizeFully () était meilleur pour moi car il donne: WordUtils.capitalizeFully ("je suis FINE") = "Je vais bien"
theINtoy
2
Juste une petite mise à jour, WordUtils est passé à Commons Text et est obsolète dans Commons Lang
msrd0
Le printemps a aussiStringUtils.capitalise()
OrangeDog
@OrangeDog voulez-vous dire capitalize()?
TylerH
@TylerH oui, la
correction automatique y est arrivée
60

Il n'y a pas de méthodes capitalize () ou titleCase () dans la classe String de Java. Vous avez deux choix:

 StringUtils.capitalize(null)  = null
 StringUtils.capitalize("")    = ""
 StringUtils.capitalize("cat") = "Cat"
 StringUtils.capitalize("cAt") = "CAt"
 StringUtils.capitalize("'cat'") = "'cat'"
  • écrire (encore une autre) méthode d'assistance statique toTitleCase ()

Exemple d'implémentation

public static String toTitleCase(String input) {
    StringBuilder titleCase = new StringBuilder(input.length());
    boolean nextTitleCase = true;

    for (char c : input.toCharArray()) {
        if (Character.isSpaceChar(c)) {
            nextTitleCase = true;
        } else if (nextTitleCase) {
            c = Character.toTitleCase(c);
            nextTitleCase = false;
        }

        titleCase.append(c);
    }

    return titleCase.toString();
}

Cas de test

    System.out.println(toTitleCase("string"));
    System.out.println(toTitleCase("another string"));
    System.out.println(toTitleCase("YET ANOTHER STRING"));

les sorties:

Chaîne
Une autre chaîne
ENCORE UNE AUTRE CHAÎNE
dfa
la source
1
C'est une jolie petite routine, mais elle échoue dans le cas plus général dans lequel les chaînes peuvent représenter des noms. Dans ce cas, la mise en majuscule devrait également avoir lieu après les apostrophes et les tirets. Par exemple. O'Connor et J. Wilkes-Booth. Bien sûr, d'autres langues peuvent avoir des règles de casse de titre supplémentaires.
scottb
... S'il devait inclure cela, n'aurait-il pas besoin d'une recherche complète dans le dictionnaire juste pour déterminer si le mot actuel était un nom? Cela semble un peu trop pour n'importe quelle méthode.
MMJZ
Ce code est presque parfait car certains noms peuvent avoir des prépositons tels que de, del, della, dei, da comme dans Maria del Carmen, Maria da Silva, Maria della Salute, etc. coderanch.com/t/35096/Programming/…
Junior Mayhé
Cela ne rompt-il pas avec l'apostrophe? Qu'en est-il de O'Brian par exemple.
sproketboy
1
Remarque: pour éviter le redimensionnement de celui utilisé char[]en interne dans StringBuilderje suggère d'utilisernew StringBuilder(input.length())
Lino
38

Si je peux soumettre mon avis sur la solution ...

La méthode suivante est basée sur celle publiée par dfa. Il apporte le changement majeur suivant (qui est adapté à la solution dont j'avais besoin à l'époque): il force tous les caractères de la chaîne d'entrée en minuscules à moins qu'il ne soit immédiatement précédé d'un "délimiteur actionnable" auquel cas le caractère est contraint en haut de casse.

Une limitation majeure de ma routine est qu'elle fait l'hypothèse que la "casse de titre" est uniformément définie pour toutes les locales et est représentée par les mêmes conventions de casse que j'ai utilisées et donc elle est moins utile que le code de dfa à cet égard.

public static String toDisplayCase(String s) {

    final String ACTIONABLE_DELIMITERS = " '-/"; // these cause the character following
                                                 // to be capitalized
    
    StringBuilder sb = new StringBuilder();
    boolean capNext = true;

    for (char c : s.toCharArray()) {
        c = (capNext)
                ? Character.toUpperCase(c)
                : Character.toLowerCase(c);
        sb.append(c);
        capNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0); // explicit cast not needed
    }
    return sb.toString();
}

VALEURS DE TEST

un string

maRTin O'maLLEY

John Wilkes-Booth

ENCORE UNE AUTRE CHAÎNE

LES SORTIES

Un string

Martin O'Malley

John Wilkes-Booth

Encore une autre chaîne

Scottb
la source
ne fonctionnera pas avec des ligatures comme lj, dont la majuscule est LJ mais la casse de titre est Lj. Utilisez Character.toTitleCaseplutôt.
mihi
@mihi: ne fonctionnera pas non plus avec d'autres règles spécialisées, par exemple. noms de famille tels que McNamara ou MacDonald.
scottb
mais ces cas ne peuvent pas être résolus par nature. L'utilisation de la fonction de conversion de casse correcte (titlecase est censée être utilisée pour mettre en majuscule un mot, et non en majuscule, selon les règles Unicode) peut être effectuée (et c'est facile).
mihi
Cela ne ferait-il pas aussi pour "elle" de devenir "elle"?
allicarn
C'est vrai. Cela fonctionne bien sur les champs de nom mais, comme vous le faites remarquer, pas sur la prose générale. Cela ne fonctionnerait même pas bien sur tous les noms, Vulcains en particulier (T'Pau au lieu de T'pau).
scottb
21

Utilisez WordUtils.capitalizeFully () d'Apache Commons.

WordUtils.capitalizeFully(null)        = null
WordUtils.capitalizeFully("")          = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
jiehanzheng
la source
1
Belle solution! Merci! Mais cela ne fonctionne pas à 100% du temps, car il met également en majuscule par exemple "a" dans ce titre: "Ceci est un titre". Voir english.stackexchange.com/questions/14/… . Connaissez-vous une bibliothèque qui traite de cela?
Eirik W le
10

Vous pouvez utiliser les langages apache commons comme ceci:

WordUtils.capitalizeFully("this is a text to be capitalize")

vous pouvez trouver la documentation java ici: WordUtils.capitalizeFully java doc

et si vous souhaitez supprimer les espaces entre les mondes, vous pouvez utiliser:

StringUtils.remove(WordUtils.capitalizeFully("this is a text to be capitalize")," ")

vous pouvez trouver la doc java pour String StringUtils.remove java doc

j'espère que cette aide.

Vegegoku
la source
5

Si vous voulez la bonne réponse selon la dernière norme Unicode, vous devez utiliser icu4j.

UCharacter.toTitleCase(Locale.US, "hello world", null, 0);

Notez que cela dépend des paramètres régionaux.

Documentation de l'API

la mise en oeuvre

Daniel F
la source
Voir également la nouvelle CaseMap de l'API ICU4J: icu-project.org/apiref/icu4j/com/ibm/icu/text/…
sffc
Également disponible dans l'API Android niveau 24: developer.android.com/reference/android/icu/lang/…
sffc
3

Voici une autre prise basée sur les réponses de @ dfa et @ scottb qui gère tous les caractères autres que des lettres / chiffres:

public final class TitleCase {

    public static String toTitleCase(String input) {

        StringBuilder titleCase = new StringBuilder(input.length());
        boolean nextTitleCase = true;

        for (char c : input.toLowerCase().toCharArray()) {
            if (!Character.isLetterOrDigit(c)) {
                nextTitleCase = true;
            } else if (nextTitleCase) {
                c = Character.toTitleCase(c);
                nextTitleCase = false;
            }
            titleCase.append(c);
        }

        return titleCase.toString();
    }

}

Compte tenu de l'entrée:

MARY ÄNN O'CONNEŽ-ŠUSLIK

la sortie est

Mary Änn O'Connež-Šuslik

mrts
la source
2

C'est quelque chose que j'ai écrit pour convertir snake_case en lowerCamelCase mais pourrait facilement être ajusté en fonction des exigences

private String convertToLowerCamel(String startingText)
{
    String[] parts = startingText.split("_");
    return parts[0].toLowerCase() + Arrays.stream(parts)
                    .skip(1)
                    .map(part -> part.substring(0, 1).toUpperCase() + part.substring(1).toLowerCase())
                    .collect(Collectors.joining());
}
utilisateur1743960
la source
Votre réponse fonctionne comme un charme, cependant, la solution ne semble pas gérer une séquence de mots uniques, peut-être qu'une condition if devrait suffire.
yashgarg1232
1

Je sais que c'est plus ancien, mais ne porte pas la réponse simple, j'avais besoin de cette méthode pour mon codage alors j'ai ajouté ici, simple à utiliser.

public static String toTitleCase(String input) {
    input = input.toLowerCase();
    char c =  input.charAt(0);
    String s = new String("" + c);
    String f = s.toUpperCase();
    return f + input.substring(1);
}
Manish Bansal
la source
1

J'ai eu ce problème et je l'ai recherché, puis j'ai créé ma propre méthode en utilisant des mots-clés Java, il suffit de passer la variable String en tant que paramètre et d'obtenir la sortie sous le nom de String approprié.

public class Main
{
  public static void main (String[]args)
  {
    String st = "pARVeEN sISHOsIYA";
    String mainn = getTitleCase (st);
      System.out.println (mainn);
  }


  public static String getTitleCase(String input)
  {
    StringBuilder titleCase = new StringBuilder (input.length());
    boolean hadSpace = false;
    for (char c:input.toCharArray ()){
        if(Character.isSpaceChar(c)){
            hadSpace = true;
            titleCase.append (c);
            continue;
        }
        if(hadSpace){
            hadSpace = false;
            c = Character.toUpperCase(c);
            titleCase.append (c);
        }else{
            c = Character.toLowerCase(c);
            titleCase.append (c);
        }
    }
    String temp=titleCase.toString ();
    StringBuilder titleCase1 = new StringBuilder (temp.length ());
    int num=1;
    for (char c:temp.toCharArray ())
        {   if(num==1)
            c = Character.toUpperCase(c);
            titleCase1.append (c);
            num=0;
        }
        return titleCase1.toString ();
    }
}
Parveen Sishodiya
la source
Ici, je n'ai utilisé la méthode de coupe nulle part parce que dans mon cas, je recevais une chaîne coupée appropriée.
Parveen Sishodiya
0

vous pouvez très bien utiliser

org.apache.commons.lang.WordUtils

ou

CaseFormat

de l'API de Google.

gkarthiks
la source
1
Il serait utile d'ajouter la méthode et un exemple.
jechaviz
CaseFormat n'a que des formats généralement utilisés dans les identificateurs de programme (UpperCamel, low-hypen, UPPER_UNDERSCORE, etc.) et ne prend en charge que le texte ASCII. Cela ne fonctionnerait pas bien pour la conversion en cas de titre.
M. Justin
0

J'ai récemment rencontré ce problème et j'ai malheureusement eu de nombreuses occurrences de noms commençant par Mc et Mac, j'ai fini par utiliser une version du code de scottb que j'ai modifiée pour gérer ces préfixes, donc c'est ici au cas où quelqu'un voudrait l'utiliser.

Il y a encore des cas extrêmes que cela manque, mais la pire chose qui puisse arriver est qu'une lettre sera en minuscule alors qu'elle devrait être en majuscule.

/**
 * Get a nicely formatted representation of the name. 
 * Don't send this the whole name at once, instead send it the components.<br>
 * For example: andrew macnamara would be returned as:<br>
 * Andrew Macnamara if processed as a single string<br>
 * Andrew MacNamara if processed as 2 strings.
 * @param name
 * @return correctly formatted name
 */
public static String getNameTitleCase (String name) {
    final String ACTIONABLE_DELIMITERS = " '-/";
    StringBuilder sb = new StringBuilder();
    if (name !=null && !name.isEmpty()){                
        boolean capitaliseNext = true;
        for (char c : name.toCharArray()) {
            c = (capitaliseNext)?Character.toUpperCase(c):Character.toLowerCase(c);
            sb.append(c);
            capitaliseNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0);
        }                       
        name = sb.toString();    
        if (name.startsWith("Mc") && name.length() > 2 ) {
            char c = name.charAt(2);
            if (ACTIONABLE_DELIMITERS.indexOf((int) c) < 0) {
                sb = new StringBuilder();
                sb.append (name.substring(0,2));
                sb.append (name.substring(2,3).toUpperCase());
                sb.append (name.substring(3));
                name=sb.toString();
            }               
        } else if (name.startsWith("Mac") && name.length() > 3) {
            char c = name.charAt(3);
            if (ACTIONABLE_DELIMITERS.indexOf((int) c) < 0) {
                sb = new StringBuilder();
                sb.append (name.substring(0,3));
                sb.append (name.substring(3,4).toUpperCase());
                sb.append (name.substring(4));
                name=sb.toString();
            }
        }
    }
    return name;    
}
Old Nick
la source
0

Conversion en cas de titre approprié:

String s= "ThiS iS SomE Text";
String[] arr = s.split(" ");
s = "";
for (String s1 : arr) {
    s += WordUtils.capitalize(s1.toLowerCase()) + " ";
}
s = s.substring(0, s.length() - 1);

Résultat: "Ceci est un texte"

VAIBHAV SHEERSH
la source
0

Utilisation de Spring StringUtils:

org.springframework.util.StringUtils.capitalize(someText);

Si vous utilisez déjà Spring de toute façon, cela évite d'introduire un autre framework.

David Lavande
la source
0

Utilisez cette méthode pour convertir une chaîne en casse de titre:

static String toTitleCase(String word) {
    return Stream.of(word.split(" "))
            .map(w -> w.toUpperCase().charAt(0)+ w.toLowerCase().substring(1))
            .reduce((s, s2) -> s + " " + s2).orElse("");
}
Abdulhamid Yusuf
la source
0

Ce convertisseur transforme toute chaîne contenant une casse de chameau, des espaces blancs, des chiffres et d'autres caractères en casse de titre nettoyée.

/**
 * Convert a string to title case in java (with tests).
 *
 * @author Sudipto Chandra
 */
public abstract class TitleCase {

    /**
     * Returns the character type. <br>
     * <br>
     * Digit = 2 <br>
     * Lower case alphabet = 0 <br>
     * Uppercase case alphabet = 1 <br>
     * All else = -1.
     *
     * @param ch
     * @return
     */
    private static int getCharType(char ch) {
        if (Character.isLowerCase(ch)) {
            return 0;
        } else if (Character.isUpperCase(ch)) {
            return 1;
        } else if (Character.isDigit(ch)) {
            return 2;
        }
        return -1;
    }

    /**
     * Converts any given string in camel or snake case to title case.
     * <br>
     * It uses the method getCharType and ignore any character that falls in
     * negative character type category. It separates two alphabets of not-equal
     * cases with a space. It accepts numbers and append it to the currently
     * running group, and puts a space at the end.
     * <br>
     * If the result is empty after the operations, original string is returned.
     *
     * @param text the text to be converted.
     * @return a title cased string
     */
    public static String titleCase(String text) {
        if (text == null || text.length() == 0) {
            return text;
        }

        char[] str = text.toCharArray();
        StringBuilder sb = new StringBuilder();

        boolean capRepeated = false;
        for (int i = 0, prev = -1, next; i < str.length; ++i, prev = next) {
            next = getCharType(str[i]);
            // trace consecutive capital cases
            if (prev == 1 && next == 1) {
                capRepeated = true;
            } else if (next != 0) {
                capRepeated = false;
            }
            // next is ignorable
            if (next == -1) {
                // System.out.printf("case 0, %d %d %s\n", prev, next, sb.toString());
                continue; // does not append anything
            }
            // prev and next are of same type
            if (prev == next) {
                sb.append(str[i]);
                // System.out.printf("case 1, %d %d %s\n", prev, next, sb.toString());
                continue;
            }
            // next is not an alphabet
            if (next == 2) {
                sb.append(str[i]);
                // System.out.printf("case 2, %d %d %s\n", prev, next, sb.toString());
                continue;
            }
            // next is an alphabet, prev was not +
            // next is uppercase and prev was lowercase
            if (prev == -1 || prev == 2 || prev == 0) {
                if (sb.length() != 0) {
                    sb.append(' ');
                }
                sb.append(Character.toUpperCase(str[i]));
                // System.out.printf("case 3, %d %d %s\n", prev, next, sb.toString());
                continue;
            }
            // next is lowercase and prev was uppercase
            if (prev == 1) {
                if (capRepeated) {
                    sb.insert(sb.length() - 1, ' ');
                    capRepeated = false;
                }
                sb.append(str[i]);
                // System.out.printf("case 4, %d %d %s\n", prev, next, sb.toString());
            }
        }
        String output = sb.toString().trim();
        output = (output.length() == 0) ? text : output;
        //return output;

        // Capitalize all words (Optional)
        String[] result = output.split(" ");
        for (int i = 0; i < result.length; ++i) {
            result[i] = result[i].charAt(0) + result[i].substring(1).toLowerCase();
        }
        output = String.join(" ", result);
        return output;
    }

    /**
     * Test method for the titleCase() function.
     */
    public static void testTitleCase() {
        System.out.println("--------------- Title Case Tests --------------------");
        String[][] samples = {
            {null, null},
            {"", ""},
            {"a", "A"},
            {"aa", "Aa"},
            {"aaa", "Aaa"},
            {"aC", "A C"},
            {"AC", "Ac"},
            {"aCa", "A Ca"},
            {"ACa", "A Ca"},
            {"aCamel", "A Camel"},
            {"anCamel", "An Camel"},
            {"CamelCase", "Camel Case"},
            {"camelCase", "Camel Case"},
            {"snake_case", "Snake Case"},
            {"toCamelCaseString", "To Camel Case String"},
            {"toCAMELCase", "To Camel Case"},
            {"_under_the_scoreCamelWith_", "Under The Score Camel With"},
            {"ABDTest", "Abd Test"},
            {"title123Case", "Title123 Case"},
            {"expect11", "Expect11"},
            {"all0verMe3", "All0 Ver Me3"},
            {"___", "___"},
            {"__a__", "A"},
            {"_A_b_c____aa", "A B C Aa"},
            {"_get$It132done", "Get It132 Done"},
            {"_122_", "122"},
            {"_no112", "No112"},
            {"Case-13title", "Case13 Title"},
            {"-no-allow-", "No Allow"},
            {"_paren-_-allow--not!", "Paren Allow Not"},
            {"Other.Allow.--False?", "Other Allow False"},
            {"$39$ldl%LK3$lk_389$klnsl-32489  3 42034 ", "39 Ldl Lk3 Lk389 Klnsl32489342034"},
            {"tHis will BE MY EXAMple", "T His Will Be My Exa Mple"},
            {"stripEvery.damn-paren- -_now", "Strip Every Damn Paren Now"},
            {"getMe", "Get Me"},
            {"whatSthePoint", "What Sthe Point"},
            {"n0pe_aLoud", "N0 Pe A Loud"},
            {"canHave SpacesThere", "Can Have Spaces There"},
            {"  why_underScore exists  ", "Why Under Score Exists"},
            {"small-to-be-seen", "Small To Be Seen"},
            {"toCAMELCase", "To Camel Case"},
            {"_under_the_scoreCamelWith_", "Under The Score Camel With"},
            {"last one onTheList", "Last One On The List"}
        };
        int pass = 0;
        for (String[] inp : samples) {
            String out = titleCase(inp[0]);
            //String out = WordUtils.capitalizeFully(inp[0]);
            System.out.printf("TEST '%s'\nWANTS '%s'\nFOUND '%s'\n", inp[0], inp[1], out);
            boolean passed = (out == null ? inp[1] == null : out.equals(inp[1]));
            pass += passed ? 1 : 0;
            System.out.println(passed ? "-- PASS --" : "!! FAIL !!");
            System.out.println();
        }
        System.out.printf("\n%d Passed, %d Failed.\n", pass, samples.length - pass);
    }

    public static void main(String[] args) {
        // run tests
        testTitleCase();
    }
}

Voici quelques entrées:

aCamel
TitleCase
snake_case
fromCamelCASEString
ABCTest
expect11
_paren-_-allow--not!
  why_underScore   exists  
last one onTheList 

Et mes sorties:

A Camel
Title Case
Snake Case
From Camel Case String
Abc Test
Expect11
Paren Allow Not
Why Under Score Exists
Last One On The List
Dipu
la source
0

Il semble qu'aucune des réponses ne le formate dans le cas du titre actuel: "Comment décrocher votre emploi de rêve", "Pour tuer un moqueur", etc. donc j'ai fait ma propre méthode. Fonctionne mieux pour les textes en anglais.

private final static Set<Character> TITLE_CASE_DELIMITERS = new HashSet<>();

  static {
    TITLE_CASE_DELIMITERS.add(' ');
    TITLE_CASE_DELIMITERS.add('.');
    TITLE_CASE_DELIMITERS.add(',');
    TITLE_CASE_DELIMITERS.add(';');
    TITLE_CASE_DELIMITERS.add('/');
    TITLE_CASE_DELIMITERS.add('-');
    TITLE_CASE_DELIMITERS.add('(');
    TITLE_CASE_DELIMITERS.add(')');
  }

  private final static Set<String> TITLE_SMALLCASED_WORDS = new HashSet<>();

  static {
    TITLE_SMALLCASED_WORDS.add("a");
    TITLE_SMALLCASED_WORDS.add("an");
    TITLE_SMALLCASED_WORDS.add("the");
    TITLE_SMALLCASED_WORDS.add("for");
    TITLE_SMALLCASED_WORDS.add("in");
    TITLE_SMALLCASED_WORDS.add("on");
    TITLE_SMALLCASED_WORDS.add("of");
    TITLE_SMALLCASED_WORDS.add("and");
    TITLE_SMALLCASED_WORDS.add("but");
    TITLE_SMALLCASED_WORDS.add("or");
    TITLE_SMALLCASED_WORDS.add("nor");
    TITLE_SMALLCASED_WORDS.add("to");
  }

  public static String toCapitalizedWord(String oneWord) {
    if (oneWord.length() < 1) {
      return oneWord.toUpperCase();
    }
    return "" + Character.toTitleCase(oneWord.charAt(0)) + oneWord.substring(1).toLowerCase();
  }

  public static String toTitledWord(String oneWord) {
    if (TITLE_SMALLCASED_WORDS.contains(oneWord.toLowerCase())) {
      return oneWord.toLowerCase();
    }
    return toCapitalizedWord(oneWord);
  }

  public static String toTitleCase(String str) {
    StringBuilder result = new StringBuilder();
    StringBuilder oneWord = new StringBuilder();

    char previousDelimiter = 'x';
    /* on start, always move to upper case */
    for (char c : str.toCharArray()) {
      if (TITLE_CASE_DELIMITERS.contains(c)) {
        if (previousDelimiter == '-' || previousDelimiter == 'x') {
          result.append(toCapitalizedWord(oneWord.toString()));
        } else {
          result.append(toTitledWord(oneWord.toString()));
        }
        oneWord.setLength(0);
        result.append(c);
        previousDelimiter = c;
      } else {
        oneWord.append(c);
      }
    }
    if (previousDelimiter == '-' || previousDelimiter == 'x') {
      result.append(toCapitalizedWord(oneWord.toString()));
    } else {
      result.append(toTitledWord(oneWord.toString()));
    }
    return result.toString();
  }

  public static void main(String[] args) {
    System.out.println(toTitleCase("one year in paris"));
    System.out.println(toTitleCase("How to Land Your Dream Job"));
  }
Mladen Adamovic
la source
0

C'est la solution la plus simple

    static void title(String a,String b){
    String ra = Character.toString(Character.toUpperCase(a.charAt(0)));
    String rb = Character.toString(Character.toUpperCase(b.charAt(0)));
    for(int i=1;i<a.length();i++){
        ra+=a.charAt(i);
    }
    for(int i=1;i<b.length();i++){
        rb+=b.charAt(i);
    }
    System.out.println(ra+" "+rb);
Reppin Frost
la source
-1

Cela devrait fonctionner:

String str="i like pancakes";
String arr[]=str.split(" ");
String strNew="";
for(String str1:arr)
{
    Character oldchar=str1.charAt(0);
    Character newchar=Character.toUpperCase(str1.charAt(0));
    strNew=strNew+str1.replace(oldchar,newchar)+" ";    
}
System.out.println(strNew);
Neha
la source
1
Ce n'est pas une réponse valide car l'OP a demandé une fonction intégrée . Voir aussi le commentaire qui traite de la complexité cachée derrière cela, à savoir i18n.
Marcus
-2

Le moyen le plus simple de convertir une chaîne en cas de titre consiste à utiliser le package googles org.apache.commons.lang.WordUtils

System.out.println(WordUtils.capitalizeFully("tHis will BE MY EXAMple"));

En résultera

Ce sera mon exemple

Je ne sais pas pourquoi il s'appelle "capitalizeFully", où en fait la fonction ne fait pas un résultat capital complet, mais de toute façon, c'est l'outil dont nous avons besoin.

JoeG
la source
1
Il est nommé capitalizeFullycar il met en majuscule chaque mot, y compris ceux qui doivent être en minuscules dans un titre. grammar.about.com/od/tz/g/Title-Case.htm
aij
2
Apache Commons n'appartient pas à Google. Il est maintenu par l'Apache Software Foundation. commons.apache.org
ATutorMe
-3

Désolé, je suis un débutant donc mon habitude de coder est nul!

public class TitleCase {

    String title(String sent)
    {   
        sent =sent.trim();
        sent = sent.toLowerCase();
        String[] str1=new String[sent.length()];
        for(int k=0;k<=str1.length-1;k++){
            str1[k]=sent.charAt(k)+"";
    }

        for(int i=0;i<=sent.length()-1;i++){
            if(i==0){
                String s= sent.charAt(i)+"";
                str1[i]=s.toUpperCase();
                }
            if(str1[i].equals(" ")){
                String s= sent.charAt(i+1)+"";
                str1[i+1]=s.toUpperCase();
                }

            System.out.print(str1[i]);
            }

        return "";
        }

    public static void main(String[] args) {
        TitleCase a = new TitleCase();
        System.out.println(a.title("   enter your Statement!"));
    }
}
Vishwanath Dasa
la source