我想代码中的所有字符转换成字符串在Java中大写或小写。
我发现,是这样的方法:
public static String changelowertoupper()
{
String str = "CyBeRdRaGoN";
str=str.toLowerCase(Locale.ENGLISH);
return str;
}
现在,我读过,使用某些Locale
S,像土耳其,“ 我的回报(不点),而不是我(与点)。”
是否可以安全使用的Locale
就像英国,美国,英国等? 在它们之间有很大的差异,当应用于字符串?
这是最首选Locale
的String
S'
我认为你应该使用的语言环境,
例如,“TITLE” .toLowerCase()在土耳其语言环境返回“标题”,其中“I”是拉丁文小写字母无点我的性格。 要获得现场大小写的字符串正确的结果,请使用toLowerCase(Locale.ENGLISH)。
我指的是这些链接为解决您的问题,它有一点要记住在你的情况“土耳其”
**FROM THE LINKS**
toLowerCase()尊重国际化(I18N)。 它执行相对于语言环境的情况下转换。 当调用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ı`
}
}
在上述程序中,看串长度转换前后。 这将是1名3是字符串的长度之前和之后的情况下的转换是不同的。 当你依赖于字符串长度在这种情况下你的逻辑会去折腾。 当你的程序在不同的环境中得到执行,则可能会失败。 这将是代码审查一个很好的渔获物。
为了使它更安全,你可以使用另一种方法toLowerCase(Locale.English)和覆盖区域设置为英语始终。 但你没有国际化。
所以关键是,toLowerCase()是特定于语言环境。
参考1
参考2
参考3
带点-I,是一个小写的“i”不点。 此字符的大写是通常的“我”。 还有另一种性格,“我点”。 此字符的小写字母是小写通常“我”。
你是否注意到这个问题? 这unsymetrical转换导致编程的一个严重问题。 我们面对的大多是由于(恕我直言)的Java应用程序执行不力的toLowerCase方法和toUpperCase功能这个问题。
在Java中,String.toLowerCase()方法转换字符根据默认区域为小写。 这会导致问题,如果您的应用程序工作在土耳其语言环境,特别是如果你正在使用此功能对文件名或必须遵守一定的字符集的URL。
我曾在博客中前约两个严重的例子:用脚本库的编译错误与“我”在他们的名字和XSP经理的过错,如果一个XPage是在数据库名称中带有“I”。
有一个很长的历史,就像我说的。 例如,在一些R7版本中,路由器无法将消息发送到收件人,如果他/她的名字与“我”开始。 消息报告,代理商土耳其语言环境不运行,直到R8。 任何人只要有土耳其语言环境不能安装Lotus Notes 8.5.1(这是真的!)。 这样的例子不胜枚举...
几乎没有beta测试者从土耳其和客户不打开PMR这些问题。 所以,这些问题都不会到第一优先级的开发团队。
即使Java团队又增加了一个特殊的警告,最新文档:
这种方法是语言环境敏感的,可能产生,如果用于该旨在被独立地解释区域设置字符串意外的结果。 例子有编程语言标识符,协议键,和HTML标签。 例如,“TITLE” .toLowerCase()在土耳其语言环境返回“标题”,其中“I”是拉丁文小写字母无点我的性格。 要获得现场大小写的字符串正确的结果,请使用toLowerCase(Locale.ENGLISH)。
请阅读的链接,我不能此帖的所有IT的“THIS IS答复您的意见”
String str = "CyBeRdRaGoN";
str = str.toLowerCase(); // str = "cyberdragon"
str = str.toUpperCase(); // str = "CYBERDRAGON"
您的应用程序会选择默认的语言环境,因此,如果有人将运行在土耳其与土耳其语言环境您的应用程序,他会看到i
没有点
您可以为您的适当的区域设置String
的语言。
例如:
toUpperCase(new Locale("tr","TR"));
会做土耳其的伎俩。
如果您在使用此功能用于检查字符串(如搜索)它是安全的使用一个大写或小写形式的字符串进行检查。 你可以使用这样的:
if (mViewData.list.data[i].Name.toLowerCase(new Locale("tr", "TR"))
.contains(mViewHolder.tctSearch.getText().toString().trim()
.toLowerCase(new Locale("tr", "TR")))) {
// your code here...
}
我面临同样的问题,但在列表视图搜索的情况。 我说这个答案,它可以帮助谁的人有同样的问题。