[java] 문자열을 제목 대소 문자로 변환하는 방법이 있습니까?

문자열을 제목 케이스 형식으로 변환하는 데 사용할 수있는 내장 메서드가 있습니까?



답변

Apache Commons StringUtils.capitalize () 또는 Commons Text WordUtils.capitalize ()

예를 들어 : WordUtils.capitalize("i am FINE") = "I Am FINE"로부터 WordUtils의 문서


답변

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가 게시 한 방법을 기반으로합니다. 다음과 같은 주요 변경 사항을 적용합니다 (당시 필요한 솔루션에 적합). 문자가 강제 변환되는 “실행 가능한 구분 기호”가 바로 앞에 나오지 않는 한 입력 문자열의 모든 문자를 소문자로 강제 변환합니다. 대문자.

내 루틴의 주요 한계는 “제목 대소 문자”가 모든 로케일에 대해 균일하게 정의되고 내가 사용한 것과 동일한 대소 문자 규칙에 의해 표현된다는 가정을 만드는 것이므로 그 점에서 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();
}

테스트 값

문자열

maRTin o’maLLEY

존 윌크스 부스

아직 다른 문자열

출력

문자열

마틴 오말리

존 윌크스 부스

또 다른 문자열


답변

Apache Commons에서 WordUtils.capitalizeFully () 를 사용하십시오 .

WordUtils.capitalizeFully(null)        = null
WordUtils.capitalizeFully("")          = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"


답변

다음과 같이 아파치 공용 언어를 사용할 수 있습니다.

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

여기에서 자바 문서를 찾을 수 있습니다.
WordUtils.capitalizeFully 자바 문서

세계 사이의 공백을 제거하려면 다음을 사용할 수 있습니다.

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

String StringUtils.remove java doc에 대한 Java 문서를 찾을 수 있습니다.

이 도움이되기를 바랍니다.


답변

최신 유니 코드 표준에 따른 정답을 원한다면 icu4j를 사용해야합니다.

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

이것은 로케일에 민감합니다.

API 문서

이행


답변

다음은 문자 / 숫자가 아닌 문자를 처리하는 @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();
    }

}

주어진 입력 :

메리 엔 오코 네즈-수슬 리크

출력은

메리 엔 오코 네즈-수슬 리크