当前位置:网站首页>String.toLowerCase(Locale.ROOT)
String.toLowerCase(Locale.ROOT)
2022-08-09 06:27:00 【Koala Rice Bowl】
String.toLowerCase(Locale.ROOT)
环境:jdk1.8
Localeis the transformation rule for the region
首先看到Locale类中的ROOTis an object initialized with two empty strings,表示所有语言环境的基本语言环境,并且用于语言/国家无关的区域设置,用于区域设置敏感的操作.
/** * Useful constant for the root locale. The root locale is the locale whose * language, country, and variant are empty ("") strings. This is regarded * as the base locale of all locales, and is used as the language/country * neutral locale for the locale sensitive operations. * * @since 1.6 */
static public final Locale ROOT = createConstant("", "");
Some language and regional properties
/** Useful constant for language. */
static public final Locale JAPANESE = createConstant("ja", "");
/** Useful constant for language. */
static public final Locale KOREAN = createConstant("ko", "");
/** Useful constant for language. */
static public final Locale CHINESE = createConstant("zh", "");
/** Useful constant for language. */
static public final Locale SIMPLIFIED_CHINESE = createConstant("zh", "CN"); // 中国简体
/** Useful constant for language. */
static public final Locale TRADITIONAL_CHINESE = createConstant("zh", "TW"); // 中国繁体
/** Useful constant for country. */
static public final Locale FRANCE = createConstant("fr", "FR");
/** Useful constant for country. */
static public final Locale GERMANY = createConstant("de", "DE");
/** Useful constant for country. */
static public final Locale ITALY = createConstant("it", "IT");
/** Useful constant for country. */
static public final Locale JAPAN = createConstant("ja", "JP");
/** Useful constant for country. */
static public final Locale KOREA = createConstant("ko", "KR");
来看看StringA parameterless method to lowercase
public String toLowerCase() {
return toLowerCase(Locale.getDefault()); // The final call is all parameterized to lowercase
}
// 这里调用Locale的initDefault获取Locale
private static Locale initDefault() {
String language, region, script, country, variant;
language = AccessController.doPrivileged(
new GetPropertyAction("user.language", "en")); // Get the language of the host
// for compatibility, check for old user.region property
region = AccessController.doPrivileged(
new GetPropertyAction("user.region")); // Get the host's region
if (region != null) {
// region can be of form country, country_variant, or _variant
int i = region.indexOf('_');
if (i >= 0) {
country = region.substring(0, i);
variant = region.substring(i + 1);
} else {
country = region;
variant = "";
}
script = "";
} else {
script = AccessController.doPrivileged(
new GetPropertyAction("user.script", ""));
country = AccessController.doPrivileged(
new GetPropertyAction("user.country", ""));
variant = AccessController.doPrivileged(
new GetPropertyAction("user.variant", ""));
}
return getInstance(language, script, country, variant, null);
}
Get the language and region above,Most are in mainland China -Duser.language=“zh” \ -Duser.region=“CN” \
也就是对应的
static public final Locale SIMPLIFIED_CHINESE = createConstant("zh", "CN");
来看看StringThe final method to lowercase:
public String toLowerCase(Locale locale) {
if (locale == null) {
throw new NullPointerException();
}
int firstUpper;
final int len = value.length;
/* Now check if there are any characters that need to be changed. */
scan: {
for (firstUpper = 0 ; firstUpper < len; ) {
char c = value[firstUpper];
if ((c >= Character.MIN_HIGH_SURROGATE)
&& (c <= Character.MAX_HIGH_SURROGATE)) {
int supplChar = codePointAt(firstUpper);
if (supplChar != Character.toLowerCase(supplChar)) {
break scan;
}
firstUpper += Character.charCount(supplChar);
} else {
if (c != Character.toLowerCase(c)) {
break scan;
}
firstUpper++;
}
}
return this;
}
char[] result = new char[len];
int resultOffset = 0; /* result may grow, so i+resultOffset * is the write location in result */
/* Just copy the first few lowerCase characters. */
System.arraycopy(value, 0, result, 0, firstUpper);
String lang = locale.getLanguage();
boolean localeDependent =
(lang == "tr" || lang == "az" || lang == "lt");
char[] lowerCharArray;
int lowerChar;
int srcChar;
int srcCount;
for (int i = firstUpper; i < len; i += srcCount) {
srcChar = (int)value[i];
if ((char)srcChar >= Character.MIN_HIGH_SURROGATE
&& (char)srcChar <= Character.MAX_HIGH_SURROGATE) {
srcChar = codePointAt(i);
srcCount = Character.charCount(srcChar);
} else {
srcCount = 1;
}
if (localeDependent ||
srcChar == '\u03A3' || // Greek capital letters
srcChar == '\u0130') {
// 拉丁文大写字母Idot on top
lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
} else {
lowerChar = Character.toLowerCase(srcChar);
}
if ((lowerChar == Character.ERROR)
|| (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) {
if (lowerChar == Character.ERROR) {
lowerCharArray =
ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
} else if (srcCount == 2) {
resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount;
continue;
} else {
lowerCharArray = Character.toChars(lowerChar);
}
/* Grow result if needed */
int mapLen = lowerCharArray.length;
if (mapLen > srcCount) {
char[] result2 = new char[result.length + mapLen - srcCount];
System.arraycopy(result, 0, result2, 0, i + resultOffset);
result = result2;
}
for (int x = 0; x < mapLen; ++x) {
result[i + resultOffset + x] = lowerCharArray[x];
}
resultOffset += (mapLen - srcCount);
} else {
result[i + resultOffset] = (char)lowerChar;
}
}
return new String(result, 0, len + resultOffset);
}
从上面toLowerCase方法中
boolean localeDependent =
(lang == "tr" || lang == "az" || lang == "lt");
See this line,The method of converting to lowercase only deals with a small number of special languages
总结
If there is no special language, use no parameter directlytoLowerCase即可,I haven't done research on performance,If you are interested, you can compare
边栏推荐
- Unity Gobang Game Design and Simple AI (2)
- 【R语言】对文件进行归一化整理到各文件类型文件夹
- 半胱氨酸/半乳糖/苝二酰亚胺功能化Fe3O4四氧化三铁纳米材料|科研试剂
- 缓存技术使用
- 阿里巴巴官方技术号
- 运算放大器(OPA)超详细参数讲解-运放---以及8个型号的运算放大器分析对比
- 具有CT造影功能的硫化铋纳米棒|硫化铋-锌原卟啉复合材料(PAMAM/Bi2S3复合纳米粒子)
- Program Performance Analysis - Complexity Analysis
- 【Wwise】ArgumentException: The specified path is not of a legal form (empty). About the path reading error in WwiseGlobal
- 带头双向循环链表的增删查改(C语言实现)
猜你喜欢

Molybdenum disulfide/hafnium dioxide composite nanomaterials (MoS2/HfO2) | tantalum-doped hafnium dioxide nanoparticles (Qi Yue bio)

Bismuth sulfide nanorods with CT imaging function | Bismuth sulfide-zinc protoporphyrin composites (PAMAM/Bi2S3 composite nanoparticles)
[email protected]@cadmium sulfide nanocore-shell structure material|Fe3O4 magnetic nanop"/>Superparamagnetic iron [email protected]@cadmium sulfide nanocore-shell structure material|Fe3O4 magnetic nanop

2022-08-08: Given an array arr, it represents the height of the missiles that will appear in order from morning to night.When the cannon shoots missiles, once the cannon is set to shoot at a certain h

Excel受保护的工作表怎么操作?
![[GO]、数组与切片](/img/71/86126c41d0f43aa8b9f232b219f5d7.png)
[GO]、数组与切片

Likou Brush Question 180

Unity五子棋游戏设计 和简单AI实现(1)

Invalid argument(s) appears when redis runs lua script

excel表格如何不需鼠标往下拖动而自动往下填
随机推荐
治疗消化性溃疡—Toronto Research Chemicals 甘氨酸铝
db.sqlite3没有“as Data Source“解决方法
Remember a nest.js route that matches all the path problems that follow
pycharm环境包导入到另外一个环境
phpstudy install flarum forum
Silently start over, the first page is also a new page
Introduction of convenient functions and convenient shortcut keys of vs tomato assistant
Can Jincang Database Set Transaction Automatic Commit?
untiy countdown
Unity五子棋游戏设计 和简单AI实现(1)
力扣刷题180
中英文说明书丨CalBioreagents 山羊抗人白蛋白,IgG组分
电学知识的疑问
中英文说明书丨TRC D-阿卓糖(D-Altrose)
聚酰胺-胺(PAMAM)树形聚合物-硫化铋复合纳米粒子|硫化铋修饰Gd‑DTPA‑OA配体|科研实验用
【R语言】交互作用 测试数据
S7-200SMART PLC Modbus TCP communication
多行字符串排序在线工具
SiO2/KH550修饰四氧化三铁纳米磁性颗粒|PDA包裹四氧化三铁磁性纳米颗粒(科研级)
运放-运算放大器经典应用电路大全-应用电路大全