프로젝트에서는 문자열을 로케일로 구문 분석해야 하는 경우가 많지만 사용하기 쉬운 클래스가 없습니다.
자바 자체적으로는 3개의 생성자를 제공하지만, 실제로 사용하려면 직접 파싱해야 하기 때문에 상대적으로 번거롭다.
로케일(언어)
로케일(언어,국가)
로케일(문자열 언어, 문자열 국가, 문자열 변형)
Apache에는 LocaleUtils.toLocale(문자열 언어)이 있지만 마지막 두 문자가 소문자인 것을 지원하지 않습니다. 예: zh_CN은 이를 지원하지만 zh_cn은 지원하지 않습니다.
다른 방법을 참고하여 다음과 같은 수업을 작성하고 메모해 두었으니, 비슷한 문제를 해결하시는 분들께 도움이 되었으면 좋겠습니다.
다음과 같이 코드 코드를 복사합니다 .
import java.util.Locale;
공개 클래스 LocaleUtil
{
private final static Locale DEFAULT_LOCALE = Locale.ENGLISH;
공개 최종 정적 문자열 IETF_SEPARATOR = "-";
공개 최종 정적 문자열 SEPARATOR = "_";
공개 최종 정적 문자열 EMPTY_STRING = "";
공개 정적 로케일 toLocale(문자열 언어)
{
if( !StringUtil.isNullOrEmpty( 언어 ) )
{
return langToLocale(언어, SEPARATOR);
}
DEFAULT_LOCALE을 반환합니다.
}
공개 정적 로케일 langToLocale( 문자열 lang , 문자열 구분 기호 )
{
if( StringUtil.isNullOrEmpty( lang ) )
{
DEFAULT_LOCALE을 반환합니다.
}
문자열 언어 = EMPTY_STRING;
문자열 국가 = EMPTY_STRING;
문자열 변형 = EMPTY_STRING;
int i1 = lang.indexOf(구분자);
만약 ( i1 < 0 )
{
언어 = 랭;
} 또 다른
{
언어 = lang.substring(0, i1);
++i1;
int i2 = lang.indexOf( 구분 기호, i1);
만약 (i2 < 0)
{
국가 = lang.substring(i1);
} 또 다른
{
국가 = lang.substring(i1, i2);
변형 = lang.substring(i2+1);
}
}
if(언어.길이() == 2)
{
언어 = 언어.toLowerCase();
}또 다른
{
언어 = EMPTY_STRING;
}
if(국가.길이() == 2)
{
국가 = country.toUpperCase();
}또 다른
{
국가 = EMPTY_STRING;
}
if( (variant.length() > 0) &&
((언어.길이() == 2) ||(국가.길이() == 2)) )
{
변형 = 변형.toUpperCase();
}또 다른
{
변형 = EMPTY_STRING;
}
새 로케일(언어, 국가, 변형)을 반환합니다.
}
}
알아채다:
다음과 같이 코드 코드를 복사합니다 .
공개 클래스 StringUtil
{
공개 정적 부울 isNullOrEmpty(문자열 대상) {
return target == null || "".equals(target);
}
}