使用Java的toLowerCase()方法和toUpperCase语言环境()使用Java的toL

2019-06-17 09:42发布

我想代码中的所有字符转换成字符串在Java中大写或小写。

我发现,是这样的方法:

public static String changelowertoupper()
{
         String str = "CyBeRdRaGoN";
         str=str.toLowerCase(Locale.ENGLISH);
         return str;
}

现在,我读过,使用某些Locale S,像土耳其,“ 的回报(不点),而不是我(与点)。”

是否可以安全使用的Locale就像英国,美国,英国等? 在它们之间有很大的差异,当应用于字符串?

这是最首选LocaleString S'

Answer 1:

我认为你应该使用的语言环境,

例如,“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答复您的意见”



Answer 2:

String str = "CyBeRdRaGoN";

str = str.toLowerCase(); // str = "cyberdragon"

str = str.toUpperCase(); // str = "CYBERDRAGON"

您的应用程序会选择默认的语言环境,因此,如果有人将运行在土耳其与土耳其语言环境您的应用程序,他会看到i没有点



Answer 3:

您可以为您的适当的区域设置String的语言。

例如:

toUpperCase(new Locale("tr","TR"));

会做土耳其的伎俩。



Answer 4:

如果您在使用此功能用于检查字符串(如搜索)它是安全的使用一个大写或小写形式的字符串进行检查。 你可以使用这样的:

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...
}

我面临同样的问题,但在列表视图搜索的情况。 我说这个答案,它可以帮助谁的人有同样的问题。



文章来源: Using Locales with Java's toLowerCase() and toUpperCase()