Arj*_*K P 60 java string locale
我希望代码将字符串中的所有字符转换为Java中的大写或小写.
我找到了一个类似这样的方法:
public static String changelowertoupper()
{
String str = "CyBeRdRaGoN";
str=str.toLowerCase(Locale.ENGLISH);
return str;
}
Run Code Online (Sandbox Code Playgroud)
现在我已经读过使用某些Locales,比如土耳其语,"返回i(没有点)而不是i(带点)."
使用Locale英国,美国,英国等国家是否安全?应用于字符串时,它们之间是否存在很大差异?
这是最优先Locale的StringS'
sha*_*eef 66
我认为你应该使用locale,
例如,土耳其语语言环境中的"TITLE".toLowerCase()返回"tıtle",其中"ı"是LATIN SMALL LETTER DOTLESS I字符.要获取区域设置不敏感字符串的正确结果,请使用toLowerCase(Locale.ENGLISH).
我将这些链接称为您问题的解决方案,并指出要记住您的情况"土耳其语"
**FROM THE LINKS**
Run Code Online (Sandbox Code Playgroud)
toLowerCase()尊重国际化(i18n).它执行与您的Locale相关的大小写转换.当你调用toLowerCase()时,内部的toLowerCase(Locale.getDefault())被调用.它是区域敏感的,你不应该围绕它独立解释语言环境编写逻辑.
import java.util.Locale;
public class ToLocaleTest {
public static void main(String[] args) throws Exception {
Locale.setDefault(new Locale("lt")); //setting Lithuanian as locale
String str = "\u00cc";
System.out.println("Before case conversion is "+str+
" and length is "+str.length());// Ì
String lowerCaseStr = str.toLowerCase();
System.out.println("Lower case is "+lowerCaseStr+
" and length is "+lowerCaseStr.length());// i?`
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,查看转换前后的字符串长度.它将是1和3.是大小写转换前后的字符串长度不同.在此场景中依赖字符串长度时,您的逻辑将会折腾.当您的程序在不同的环境中执行时,它可能会失败.这将是代码审查中的一个很好的方法.
为了使其更安全,您可以使用另一种方法toLowerCase(Locale.English)并始终将语言环境覆盖为英语.但是你没有国际化.
所以关键是,toLowerCase()是特定于语言环境的.
Dotless-i是一个没有点的小写'i'.这个角色的大写字母是通常的"我".还有另一个角色,"我有点".这个字符的小写字母是通常的小写"i".
你注意到了这个问题吗?这种不对称的转换导致编程中的严重问题.我们主要在Java应用程序中遇到这个问题,因为(IMHO)toLowerCase和toUpperCase函数的实现很差.
在Java中,String.toLowerCase()方法根据默认语言环境将字符转换为小写.如果您的应用程序在土耳其语语言环境中工作,这会导致问题,特别是如果您将此函数用于文件名或必须遵守某个字符集的URL.
我之前在博客上写过两个严肃的例子:如果XPage在名称中带有"I"的数据库中,脚本库中的"i"编译错误,XSP管理器出错.
正如我所说,历史悠久.例如,在某些R7版本中,如果路由器名称以"I"开头,则无法向收件人发送消息.在R8之前,邮件报告代理未在土耳其语语言环境中运行.任何拥有土耳其语语言环境的人都无法安装Lotus Notes 8.5.1(这是真的!).名单继续......
土耳其几乎没有beta测试人员,客户也没有为这些问题打开PMR.因此,这些问题不会成为开发团队的首要任务.
甚至Java团队也对最新文档添加了一个特殊警告:
此方法对语言环境敏感,如果用于要独立解释语言环境的字符串,则可能会产生意外结果.示例是编程语言标识符,协议密钥和HTML标记.例如,土耳其语语言环境中的"TITLE".toLowerCase()返回"tıtle",其中"ı"是LATIN SMALL LETTER DOTLESS I字符.要获取区域设置不敏感字符串的正确结果,请使用toLowerCase(Locale.ENGLISH).
请仔细阅读我无法发布所有内容的链接"这是对您的评论的回复"
小智 8
您可以为您String的语言创建适当的区域设置.
例如:
toUpperCase(new Locale("tr","TR"));
Run Code Online (Sandbox Code Playgroud)
将为土耳其人做的伎俩.
String str = "CyBeRdRaGoN";
str = str.toLowerCase(); // str = "cyberdragon"
str = str.toUpperCase(); // str = "CYBERDRAGON"
Run Code Online (Sandbox Code Playgroud)
您的应用程序将选择默认语言环境,因此如果有人将使用土耳其语语言环境运行您的应用程序,他将看到i没有点
| 归档时间: |
|
| 查看次数: |
76453 次 |
| 最近记录: |