ในโปรเจ็กต์ เรามักจะต้องแยกวิเคราะห์สตริงเป็นภาษาท้องถิ่น แต่ไม่มีคลาสที่ใช้งานง่าย
Java นั้นมี Constructor อยู่ 3 ตัว แต่ในการใช้งานจริง คุณจะต้องแยกวิเคราะห์ด้วยตัวเอง ซึ่งค่อนข้างยุ่งยาก
ท้องถิ่น(langugae)
สถานที่ (ภาษา, ประเทศ)
สถานที่ (ภาษาของสตริง ประเทศของสตริง ตัวแปรของสตริง)
Apache มี LocaleUtils.toLocale (ภาษาสตริง) แต่ไม่รองรับอักขระสองตัวสุดท้ายที่เป็นตัวพิมพ์เล็ก ตัวอย่างเช่น: zh_CN รองรับ แต่ zh_cn ไม่รองรับ
อ้างอิงถึงวิธีการอื่น ฉันเขียนชั้นเรียนต่อไปนี้และจดบันทึก ฉันหวังว่ามันจะเป็นประโยชน์กับผู้ที่แก้ไขปัญหาที่คล้ายกัน
คัดลอกรหัสรหัส ดังต่อไปนี้:
นำเข้า java.util.Locale;
LocaleUtil คลาสสาธารณะ
-
ส่วนตัวสุดท้ายคงที่ Locale DEFAULT_LOCALE = Locale.ENGLISH;
สาธารณะสุดท้ายสตริงคงที่ IETF_SEPARATOR = "-";
สาธารณะสุดท้ายคง String SEPARATOR = "_";
สาธารณะสุดท้ายคงสตริง EMPTY_STRING = "";
สถานที่สาธารณะคงที่ toLocale (ภาษาสตริง)
-
ถ้า ( !StringUtil.isNullOrEmpty( ภาษา ) )
-
กลับ langToLocale( ภาษา, SEPARATOR );
-
กลับ DEFAULT_LOCALE;
-
สถานที่สาธารณะคงที่ langToLocale (สตริง lang, ตัวแยกสตริง)
-
ถ้า ( 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);
-
-
ถ้า(ภาษา.ความยาว() == 2)
-
ภาษา = language.toLowerCase();
}อื่น
-
ภาษา = EMPTY_STRING;
-
ถ้า(ประเทศ.ความยาว() == 2)
-
ประเทศ = ประเทศ toUpperCase();
}อื่น
-
ประเทศ = EMPTY_STRING;
-
ถ้า ( (ตัวแปรความยาว () > 0) &&
(( language.length() == 2) ||(country.length() == 2)) )
-
ตัวแปร = Variant.toUpperCase();
}อื่น
-
ตัวแปร = EMPTY_STRING;
-
ส่งคืน Locale ใหม่ (ภาษา ประเทศ ตัวแปร );
-
-
สังเกต:
คัดลอกรหัสรหัส ดังต่อไปนี้:
StringUtil คลาสสาธารณะ
-
บูลีนคงที่สาธารณะ isNullOrEmpty (เป้าหมายสตริง) {
กลับเป้าหมาย == null ||. เท่ากับ (เป้าหมาย);
-
-