Java是否可以在大写的字符串常量上跳过.toUpperCase()?

时间:2013-11-21 23:04:09

标签: java string optimization uppercase

我在紧急循环中发生.toUpperCase()并且已经进行了分析并显示它正在影响应用程序性能。令人讨厌的是它已经用大写字母调用了字符串。我正在考虑放弃对.toUpperCase()的调用,但这会使我的代码在以后的使用中不那么安全。

此级别的Java性能优化已经超过了我迄今为止的经验。有没有办法进行预编译,设置注释等,以便在已经大写的字符串上跳过对toUpperCase的调用?

4 个答案:

答案 0 :(得分:0)

如果可以的话,你需要做的就是在字符串上调用.toUpperCase()一次,然后存储它,这样当你完成循环时,你不必每次都这样做。

我不相信存在预编译情况 - 您无法事先知道代码将处理哪些数据。如果有人可以纠正我,那就太棒了。

如果您发布一些示例代码,我将能够提供更多帮助 - 这实际上取决于您在进入循环之前对数据的访问权限。如果您的循环实际上正在进行数据访问(例如,从文件中读取)并且您无法控制这些文件的来源,那么与数据进行硬编码相比,您的手更加紧密。

任何情况都有一个简单的答案,但在某些情况下,你可以做的并不多。

您也可以尝试equalsIgnoreCase。它不会创建新字符串。

答案 1 :(得分:0)

不能使用注释或预编译来执行此操作,因为您的输入是在运行时期间给出的,注释和预编译是编译时构造。

如果您事先知道输入,那么您可以在运行应用程序之前将其转换为大写,即在编译应用程序之前。

请注意,有许多方法可以优化字符串处理,但如果没有更多信息,我们无法为您提供任何量身定制的解决方案。

答案 2 :(得分:0)

你可以编写一个简单的函数isUpperCase(String)并在调用toUpperCase()之前调用它:

if (!isUpperCase(s)) {
    s = s.toUpperCase()  
}

它可能没有明显更快,但至少这样可以减少垃圾的产生。如果输入中的大多数字符串已经是大写,则这是非常有效的优化。

isUpperCase函数看起来大致如下:

boolean isUpperCase(String s) {
    for (int i = 0; i < s.length; i++) {
        if (Character.isLowerCase(s.charAt(i)) {
            return false;
        }
    }
    return true;
}

答案 3 :(得分:-1)

你需要做一个if语句,用它来排除那些字母。好的想法只是有条件。然后使用ascii代码,所以使用(int)转换它,然后找到大写的ascii数字,我不知道它是什么,然后继续说ascii什么是真的然后忽略这一部分或如果它的特定字母在一行然后忽略它为charAt(i)

抱歉,这是一个粗略的解释