이 대답은 약간 늦을 수 있지만 문자열을 구문 분석하는 것은 OP가 가정 한 것만 큼 추악하지 않다는 것이 밝혀졌습니다. 나는 그것이 매우 간단하고 간결하다는 것을 알았습니다.
public static Locale fromString(String locale) {
String parts[] = locale.split("_", -1);
if (parts.length == 1) return new Locale(parts[0]);
else if (parts.length == 2
|| (parts.length == 3 && parts[2].startsWith("#")))
return new Locale(parts[0], parts[1]);
else return new Locale(parts[0], parts[1], parts[2]);
}
Locale.toString () 문서에있는 모든 예제를 사용하여 Java 7에서 테스트했습니다. "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "zh_CN_ # Hans", "zh_TW_ # Hant-x-java "및"th_TH_TH_ # u-nu-thai ".
중요 업데이트 : 문서 에 따라 Java 7 이상에서 사용하는 것은 권장되지 않습니다 .
특히 toString의 출력을 언어, 국가 및 변형 필드로 구문 분석하는 클라이언트는 스크립트 또는 확장이있는 경우 변형 필드에 추가 정보가있을지라도 계속 그렇게 할 수 있습니다 ( 권장되지 않음 ).
대신 Locale.forLanguageTag 및 Locale.toLanguageTag를 사용하거나 필요한 경우 Locale.Builder를 사용하십시오.