Есть ли способ преобразования строки в регистр заголовка?

99

Доступны ли какие-либо встроенные методы для преобразования строки в формат Title Case?

TylerH
источник
3
Каждый, кто читает этот вопрос: имейте в виду, что многие из самых популярных ответов здесь НЕ РАБОТАЮТ НАДЛЕЖАЩИМ для всех языков. Вам нужна библиотека с поддержкой i18n для правильного оформления заголовков, например ICU4J (см. Ответ Дэниела Ф).
sffc

Ответы:

106

Apache Commons StringUtils.capitalize () или Commons Text WordUtils.capitalize ()

например: WordUtils.capitalize("i am FINE") = "I Am FINE"из документа WordUtils

аберрантный80
источник
14
WordUtils.capitalizeFully () был для меня лучше, так как он дает: WordUtils.capitalizeFully ("I am FINE") = "I Am FINE"
theINtoy
2
Просто небольшое обновление, WordUtils ушел в Commons Text и устарел внутри Commons Lang
msrd0
Весна тоже естьStringUtils.capitalise()
OrangeDog
@OrangeDog ты имеешь в виду capitalize()?
TylerH
61

В Java-классе String нет методов capitalize () или titleCase (). У вас есть два варианта:

 StringUtils.capitalize(null)  = null
 StringUtils.capitalize("")    = ""
 StringUtils.capitalize("cat") = "Cat"
 StringUtils.capitalize("cAt") = "CAt"
 StringUtils.capitalize("'cat'") = "'cat'"
  • написать (еще один) статический вспомогательный метод toTitleCase ()

Пример реализации

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

Прецедент

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

выходы:

Строка
Другая строка
ЕЩЕ ДРУГАЯ СТРОКА
DFA
источник
1
Это небольшая приятная процедура, но она не работает в более общем случае, когда строки могут представлять имена. В этом случае также необходимо использовать заглавные буквы после апострофов и дефисов. Например. О'Коннор и Дж. Уилкс-Бут. Конечно, в других языках могут быть дополнительные правила регистров заголовков.
scottb 01
... Если бы он собирался включить это, разве не потребовался бы полный поиск по словарю, чтобы определить, было ли текущее слово именем? Для любого метода это кажется многовато.
MMJZ
Этот код почти подходит, потому что некоторые имена могут иметь предлоги, такие как de, del, della, dei, da, как в Maria del Carmen, Maria da Silva, Maria della Salute и т. Д. Coderanch.com/t/35096/Programming/…
Junior Mayhé
Разве это не противоречит апострофу? Что насчет О'Брайана, например.
sproketboy 07
1
Примечание: чтобы избежать изменения размера внутренне используется char[]в StringBuilderя предлагаю использоватьnew StringBuilder(input.length())
Lino
38

Если я могу представить свой вариант решения ...

Следующий метод основан на том, который опубликовал dfa. Он вносит следующее существенное изменение (которое подходит для решения, которое мне было нужно в то время): оно переводит все символы во входной строке в нижний регистр, если ему непосредственно не предшествует «действующий разделитель», и в этом случае символ принудительно верхний регистр.

Основное ограничение моей процедуры состоит в том, что она предполагает, что «регистр заголовка» единообразно определен для всех локалей и представлен теми же соглашениями о регистрах, которые я использовал, и поэтому в этом отношении он менее полезен, чем код 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();
}

ИСПЫТАТЕЛЬНЫЕ ЗНАЧЕНИЯ

строка

Мартин О'мелли

Джон Уилкс-Бут

ЕЩЕ ДРУГАЯ СТРОКА

ВЫХОДЫ

Строка

Мартин О'Мэлли

Джон Уилкс-Бут

Еще одна строка

Скоттб
источник
не будет работать с лигатурами типа lj, верхний регистр которых - LJ, а регистр заголовка - is. Character.toTitleCaseВместо этого используйте .
mihi
@mihi: также не будет работать с другими специализированными правилами, например. фамилии, такие как Макнамара или Макдональд.
scottb
но эти случаи по сути не могут быть исправлены. Использование правильной функции преобразования регистра (предполагается, что для заглавной буквы следует использовать регистр, а не верхний регистр, согласно правилам Unicode) можно (и это легко).
mihi
Разве это не приведет к тому, что "ее" станет "ее"?
allicarn
Это так. Это хорошо работает с полями имен, но, как вы отметили, не с общей прозой. Это даже не сработало бы со всеми именами, в частности вулканцами (Т'Пау вместо Т'пау).
Скотт
21

Используйте WordUtils.capitalizeFully () из Apache Commons.

WordUtils.capitalizeFully(null)        = null
WordUtils.capitalizeFully("")          = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
цзеханьчжэн
источник
1
Хорошее решение! Спасибо! Но это не работает в 100% случаев, так как в этом заголовке также используется заглавная буква «а»: «Это заголовок». См. English.stackexchange.com/questions/14/… . Вы знаете какую-нибудь библиотеку, которая занимается этим?
Eirik W
10

Вы можете использовать такие языки apache commons:

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

вы можете найти java-документ здесь: WordUtils.capitalizeFully java doc

и если вы хотите удалить пробелы между мирами, вы можете использовать:

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

вы можете найти java-документ для String StringUtils.remove java doc

я надеюсь, что это поможет.

Vegegoku
источник
5

Если вы хотите получить правильный ответ в соответствии с последним стандартом Unicode, вам следует использовать icu4j.

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

Обратите внимание, что это зависит от языкового стандарта.

Документация по API

Реализация

Дэниел Ф
источник
Также см. Более новую версию ICU4J API CaseMap: icu-project.org/apiref/icu4j/com/ibm/icu/text/…
sffc
Также доступны в Android уровень API 24: developer.android.com/reference/android/icu/lang/...
sffc
3

Вот еще один вариант, основанный на ответах @ dfa и @ scottb, который обрабатывает любые небуквенные / цифровые символы:

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

}

Данный ввод:

МЭРИ ЭНН О'КОННЕШ-ШУСЛИК

выход

Мэри Энн О'Коннеж-Шуслик

mrts
источник
2

Я написал это для преобразования snake_case в lowerCamelCase, но его можно легко настроить в соответствии с требованиями.

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
источник
Ваш ответ работает как шарм, однако решение, похоже, не обрабатывает последовательность отдельных слов, возможно, достаточно условия if.
yashgarg1232 07
1

Я знаю, что это более старый, но нет простого ответа. Мне нужен этот метод для моего кодирования, поэтому я добавил сюда, простой в использовании.

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);
}
Маниш Бансал
источник
1

У меня была эта проблема, и я искал ее, а затем создал свой собственный метод, используя некоторые ключевые слова java, просто нужно передать переменную String в качестве параметра и получить вывод как правильный заголовок String.

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 ();
    }
}
Парвин Сишодия
источник
Здесь я нигде не использовал метод обрезки, потому что в моем случае я получал правильную обрезанную строку.
Парвин Сишодия 01
0

вы можете очень хорошо использовать

org.apache.commons.lang.WordUtils

или

CaseFormat

из Google API.

гкартикс
источник
1
Было бы полезно добавить метод и пример.
jechaviz
CaseFormat имеет только форматы, обычно используемые в идентификаторах программ (UpperCamel, lower-hypen, UPPER_UNDERSCORE и т. Д.), И поддерживает только текст ASCII. Это не годится для преобразования в регистр заголовков.
M. Justin
0

Недавно я тоже столкнулся с этой проблемой, и, к сожалению, у меня было много имен, начинающихся с Mc и Mac, в итоге я использовал версию кода Скотта, которую я изменил для обработки этих префиксов, поэтому она здесь на случай, если кто-то захочет ее использовать.

По-прежнему есть крайние случаи, которые не учитываются, но худшее, что может случиться, - это то, что буква будет строчной, когда она должна быть заглавной.

/**
 * 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;    
}
Старый Ник
источник
0

Преобразование в правильный регистр заголовка:

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

Результат: «Это какой-то текст»

ВАИБХАВ ШИРШ
источник
0

Используя Spring StringUtils:

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

Если вы все равно уже используете Spring, это позволяет избежать использования другой структуры.

Дэвид Лаванда
источник
0

Используйте этот метод для преобразования строки в регистр заголовка:

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("");
}
Абдулхамид Юсуф
источник
0

Этот конвертер преобразует любую строку, содержащую регистр верблюда, пробелы, цифры и другие символы, в очищенный регистр заголовка.

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

Вот некоторые исходные данные:

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

И мои выводы:

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
Дипу
источник
0

Кажется, что ни один из ответов не отформатирован в реальном регистре: «Как получить работу своей мечты», «Убить пересмешника» и т. Д., Поэтому я создал свой собственный метод. Лучше всего подходит для текстов на английском языке.

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"));
  }
Младен Адамович
источник
0

Это самое простое решение

    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);
Реппин Фрост
источник
-1

Это должно работать:

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);
Неха
источник
1
Это неверный ответ, поскольку OP запросил встроенную функцию. См. Также комментарий, в котором рассматривается скрытая за этим сложность, т.е. i18n.
Маркус
-2

Самый простой способ преобразовать любую строку в регистр заголовка - использовать пакет googles org.apache.commons.lang.WordUtils

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

Приведет к этому

Это будет моим примером

Я не уверен, почему он назван "capitalizeFully", где на самом деле функция не дает полного результата, но в любом случае это инструмент, который нам нужен.

ДжоГ
источник
1
Он назван capitalizeFullyпотому, что каждое слово в нем написано с большой буквы, включая те, которые должны быть в нижнем регистре в названии. grammar.about.com/od/tz/g/Title-Case.htm
aij
2
Apache Commons не принадлежит Google. Он поддерживается Apache Software Foundation. commons.apache.org
ATutorMe
-3

Извините, я новичок, поэтому моя привычка кодировать - отстой!

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!"));
    }
}
Вишванатх дас
источник