Zeichenfolgenkonvertierung in Groß- und Kleinschreibung

99

Gibt es integrierte Methoden, um eine Zeichenfolge als solche in das Format der Groß- und Kleinschreibung zu konvertieren?

Bartektartanus
quelle
3
Jeder, der diese Frage liest: Achten Sie darauf, dass viele der am besten bewerteten Antworten hier nicht für alle Sprachen richtig funktionieren. Sie benötigen eine i18n-fähige Bibliothek für die korrekte Titelbeschreibung, wie z. B. ICU4J (siehe Antwort von Daniel F.).
sffc
Die Antworten mit den höchsten Stimmen enthalten kein Titelformat wie "Die Katze im Hut", daher habe ich meine eigene Methode erstellt
Mladen Adamovic

Antworten:

106

Apache Commons StringUtils.capitalize () oder Commons Text WordUtils.capitalize ()

zB: WordUtils.capitalize("i am FINE") = "I Am FINE"aus WordUtils doc

aberrant80
quelle
17
+1 für den Vorschlag zur Verwendung der Bibliothek. Der gesunde Menschenverstand regiert einmal. Ich würde jedoch die Verwendung von WordUtils anstelle von StringUtils vorschlagen, da es flexiblere Optionen bietet.
Skaffman
14
WordUtils.capitalizeFully () war besser für mich, da es Folgendes gibt: WordUtils.capitalizeFully ("Ich bin in Ordnung") = "Mir geht es gut"
theINtoy
2
Nur ein kleines Update, WordUtils ist zu Commons Text gegangen und wird in Commons Lang
msrd0
@ msrd0 Danke. Die Antwort wurde bearbeitet, um dies einzuschließen. Außerdem wurde der Link StringUtils aktualisiert, da er auf eine ältere Version der Bibliothek verweist.
Per Lundberg
60

In der String-Klasse von Java gibt es keine Methodenize () oder titleCase (). Sie haben zwei Möglichkeiten:

 StringUtils.capitalize(null)  = null
 StringUtils.capitalize("")    = ""
 StringUtils.capitalize("cat") = "Cat"
 StringUtils.capitalize("cAt") = "CAt"
 StringUtils.capitalize("'cat'") = "'cat'"
  • schreibe (noch eine andere) statische Hilfsmethode toTitleCase ()

Beispielimplementierung

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

Testfall

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

Ausgänge:

String
Ein weiterer String
NOCH EIN ANDERER STRING
dfa
quelle
1
Dies ist eine nette kleine Routine, die jedoch für den allgemeineren Fall fehlschlägt, in dem Strings Namen darstellen können. In diesem Fall müsste die Großschreibung auch nach Apostrophen und Bindestrichen erfolgen. Z.B. O'Connor und J. Wilkes-Booth. Natürlich können andere Sprachen zusätzliche Regeln für die Groß- und Kleinschreibung von Titeln haben.
Scottb
... Wenn es das beinhalten würde, würde es nicht eine komplette Wörterbuchsuche benötigen, um herauszufinden, ob das aktuelle Wort ein Name ist? Das scheint für jede Methode ein bisschen viel zu sein.
MMJZ
Dieser Code ist fast in Ordnung, da einige Namen Präpositionen wie de, del, della, dei, da haben können, wie in Maria del Carmen, Maria da Silva, Maria della Salute usw. coderanch.com/t/35096/Programming/…
Junior Mayhé
Bricht das nicht mit Apostroph? Was ist zum Beispiel mit O'Brian?
Sproketboy
1
Hinweis: zur Vermeidung der intern verwendeten Ändern der Größe char[]in StringBuilderich vorschlagen , mitnew StringBuilder(input.length())
Lino - Abstimmung nicht sagen Dank
38

Wenn ich meine Meinung zur Lösung einreichen darf ...

Die folgende Methode basiert auf der von dfa veröffentlichten. Es nimmt die folgende wesentliche Änderung vor (die für die Lösung geeignet ist, die ich zu der Zeit benötigte): Es zwingt alle Zeichen in der Eingabezeichenfolge in Kleinbuchstaben, es sei denn, es wird unmittelbar ein "umsetzbares Trennzeichen" vorangestellt. In diesem Fall wird das Zeichen gezwungen Großbuchstaben.

Eine wesentliche Einschränkung meiner Routine besteht darin, dass davon ausgegangen wird, dass "title case" für alle Gebietsschemas einheitlich definiert ist und durch dieselben Fallkonventionen dargestellt wird, die ich verwendet habe. Daher ist es in dieser Hinsicht weniger nützlich als der Code von dfa.

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

TESTWERTE

ein Faden

maRTin o'maLLEY

John Wilkes-Stand

NOCH EIN ANDERER STRING

AUSGÄNGE

Ein Faden

Martin O'Malley

John Wilkes-Booth

Noch eine Saite

Scottb
quelle
funktioniert nicht mit Ligaturen wie lj, deren Großbuchstabe LJ ist, Titelbuchstabe jedoch Lj. Verwenden Sie Character.toTitleCasestattdessen.
Mihi
@mihi: funktioniert auch nicht mit anderen speziellen Regeln, z. Nachnamen wie McNamara oder MacDonald.
Scottb
Diese Fälle können jedoch von Natur aus nicht behoben werden. Die Verwendung der korrekten Konvertierungsfunktion für Groß- und Kleinschreibung (Titelbuchstabe soll verwendet werden, um ein Wort groß zu schreiben, und nicht in Großbuchstaben gemäß Unicode-Regeln) kann durchgeführt werden (und das ist einfach).
Mihi
Würde dies nicht dazu führen, dass "sie" zu "ihr" wird?
Allicarn
Es ist wahr. Dies funktioniert gut in Namensfeldern, aber, wie Sie betonen, nicht in der allgemeinen Prosa. Es würde nicht einmal bei allen Namen gut funktionieren, insbesondere bei Vulkaniern (T'Pau statt T'pau).
Scottb
20

Verwenden Sie WordUtils.capitalizeFully () von Apache Commons.

WordUtils.capitalizeFully(null)        = null
WordUtils.capitalizeFully("")          = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
jiehanzheng
quelle
1
Schöne Lösung! Vielen Dank! Dies funktioniert jedoch nicht in 100% der Fälle, da in diesem Titel auch "a" groß geschrieben wird: "Dies ist ein Titel". Siehe english.stackexchange.com/questions/14/… . Kennen Sie eine Bibliothek, die sich damit befasst?
Eirik W
10

Sie können Apache Commons langsam wie folgt verwenden:

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

Sie finden das Java-Dokument hier: WordUtils.capitalizeFully Java-Dokument

und wenn Sie die Zwischenräume zwischen den Welten entfernen möchten, können Sie Folgendes verwenden:

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

Sie finden das Java-Dokument für String StringUtils.remove Java-Dokument

Ich hoffe diese Hilfe.

Vegegoku
quelle
5

Wenn Sie die richtige Antwort gemäß dem neuesten Unicode-Standard wünschen, sollten Sie icu4j verwenden.

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

Beachten Sie, dass dies vom Gebietsschema abhängig ist.

API-Dokumentation

Implementierung

Daniel F.
quelle
Siehe auch die neuere ICU4J API CaseMap: icu-project.org/apiref/icu4j/com/ibm/icu/text/…
sffc
Auch verfügbar in Android API Level 24: developer.android.com/reference/android/icu/lang/…
sffc
3

Hier ist eine weitere Einstellung, die auf den Antworten von @ dfa und @ scottb basiert und alle Nicht-Buchstaben- / Ziffernzeichen verarbeitet:

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

}

Gegebener Input:

MARY ÄNN O'CONNEŽ-ŠUSLIK

die Ausgabe ist

Mary Catholn O'Connež-Šuslik

mrts
quelle
2

Dies ist etwas, das ich geschrieben habe, um snake_case in lowerCamelCase zu konvertieren, aber es könnte leicht an die Anforderungen angepasst werden

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());
}
user1743960
quelle
Ihre Antwort funktioniert wie ein Zauber, die Lösung scheint jedoch keine einzelne Wortfolge zu verarbeiten, möglicherweise sollte eine if-Bedingung ausreichen.
Yashgarg1232
1

Ich weiß, dass dies älter ist, aber nicht die einfache Antwort enthält. Ich brauchte diese Methode für meine Codierung, also habe ich sie hier hinzugefügt, einfach zu verwenden.

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
quelle
1

Ich hatte dieses Problem und habe danach gesucht. Dann habe ich meine eigene Methode mit einigen Java-Schlüsselwörtern erstellt. Ich muss nur die String-Variable als Parameter übergeben und die Ausgabe als String mit dem richtigen Titel erhalten.

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
quelle
Hier habe ich nirgendwo eine Trimmmethode verwendet, weil ich in meinem Fall eine richtig getrimmte Saite bekommen habe.
Parveen Sishodiya
0

Sie können sehr gut verwenden

org.apache.commons.lang.WordUtils

oder

CaseFormat

von der Google-API.

gkarthiks
quelle
1
Es wäre nützlich, die Methode und ein Beispiel hinzuzufügen.
Jechaviz
CaseFormat verfügt nur über Formate, die normalerweise in Programmkennungen verwendet werden (UpperCamel, Lower-Hypen, UPPER_UNDERSCORE usw.) und unterstützt nur ASCII-Text. Es würde nicht gut für die Konvertierung in Title Case funktionieren.
M. Justin
0

Ich bin kürzlich auch auf dieses Problem gestoßen und hatte leider viele Namen, die mit Mc und Mac begannen. Am Ende habe ich eine Version von Scottbs Code verwendet, die ich geändert habe, um diese Präfixe zu behandeln, damit sie hier ist, falls jemand sie verwenden möchte.

Es gibt immer noch Randfälle, die übersehen werden, aber das Schlimmste, was passieren kann, ist, dass ein Buchstabe in Kleinbuchstaben geschrieben wird, wenn er groß geschrieben werden sollte.

/**
 * 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;    
}
Alter Nick
quelle
0

Umstellung auf den richtigen Titel:

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

Ergebnis: "Dies ist ein Text"

VAIBHAV SHEERSH
quelle
0

Verwenden von Spring's StringUtils:

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

Wenn Sie Spring ohnehin bereits verwenden, wird dadurch vermieden, dass ein anderes Framework hinzugefügt wird.

David Lavender
quelle
0

Verwenden Sie diese Methode, um eine Zeichenfolge in Groß- und Kleinschreibung zu konvertieren:

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
quelle
0

Dieser Konverter wandelt alle Zeichenfolgen, die Kamelbuchstaben, Leerzeichen, Ziffern und andere Zeichen enthalten, in bereinigte Titelbuchstaben um.

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

Hier sind einige Eingaben:

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

Und meine Ergebnisse:

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
quelle
0

Es scheint, dass keine der Antworten es im eigentlichen Titelfall formatiert: "Wie man seinen Traumjob landet", "Um einen Spottdrossel zu töten" usw. Also habe ich meine eigene Methode entwickelt. Funktioniert am besten für englischsprachige Texte.

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
quelle
0

Dies ist die einfachste Lösung

    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
quelle
-1

Das sollte funktionieren:

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
quelle
1
Dies ist keine gültige Antwort, da das OP nach der eingebauten Funktion gefragt hat . Siehe auch den Kommentar, der die verborgene Komplexität dahinter anspricht, dh i18n.
Marcus
-2

Die einfachste Möglichkeit, eine Zeichenfolge in eine Groß- und Kleinschreibung umzuwandeln, ist die Verwendung des Google-Pakets org.apache.commons.lang.WordUtils

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

Wird dies ergeben

Dies wird mein Beispiel sein

Ich bin mir nicht sicher, warum es "capitalizeFully" heißt, wo die Funktion tatsächlich kein vollständiges Kapitalergebnis liefert, aber das ist sowieso das Werkzeug, das wir brauchen.

JoeG
quelle
1
Es wird benannt, capitalizeFullyweil es jedes Wort groß schreibt, einschließlich derjenigen, die in einem Titel in Kleinbuchstaben geschrieben werden sollten. grammar.about.com/od/tz/g/Title-Case.htm
aij
2
Apache Commons gehört nicht Google. Es wird von der Apache Software Foundation verwaltet. commons.apache.org
ATutorMe
-3

Tut mir leid, ich bin ein Anfänger, also ist meine Codierungsgewohnheit scheiße!

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
quelle