문자열을 제목 케이스 형식으로 변환하는 데 사용할 수있는 내장 메서드가 있습니까?
답변
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);
이것은 로케일에 민감합니다.
답변
다음은 문자 / 숫자가 아닌 문자를 처리하는 @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();
}
}
주어진 입력 :
메리 엔 오코 네즈-수슬 리크
출력은
메리 엔 오코 네즈-수슬 리크