【问题标题】:How to fix FindBugs' warning "Use of non-localized String.toUpperCase() or String.toLowerCase()"?如何修复 FindBugs 的警告“使用非本地化的 String.toUpperCase() 或 String.toLowerCase()”?
【发布时间】:2015-07-05 20:25:01
【问题描述】:

我有以下代码:

/**
 * Performs the filename extension check (command-line argument validity).
 * @param valid True, if the check should be performed.
 * @param filename File name to test.
 * @return False, if the test was done and the filename does not end with
 *  ".xml". Value of valid otherwise.
 */
private boolean checkFileNameExtension(final boolean valid,
    final String filename) {
    boolean result = valid;
    if (valid
        && !filename.toLowerCase(Locale.ENGLISH).endsWith(".xml")) {
        this.logger.error("File doesn't have XML extension.");
        result = false;
    }
    return result;
}

FindBugs 抱怨 toLowerCase 调用:

[WARNING] FindBugs: L I Dm: Use of non-localized String.toUpperCase() or 
String.toLowerCase() in [...]checkFileNameExtension(boolean, String)

如果我可以确定所有文件名总是只有拉丁字母的名称,我该如何正确修复该警告(正确的方法)?

【问题讨论】:

  • 由于您感兴趣的所有字符都出现在英文字母表中,您可以忽略警告。或者,不要将字符串转换为小写,而是使用不区分大小写的正则表达式。
  • 添加 Locale.ENGLISH(或 Locale.ROOT)是修复错误的正确方法,所以如果在你这样做之后仍然发生,那么你可能在 FindBugs 本身中发现了一个错误。跨度>
  • @bkail 谢谢。请提交您的评论作为答案,我会接受。

标签: java findbugs


【解决方案1】:

添加 Locale.ENGLISH(或 Locale.ROOT)是修复错误的正确方法,因此如果在添加后 FindBugs 仍然报告该错误,那么您可能在 FindBugs 本身中发现了错误。

【讨论】:

  • 作为一名 FindBugs 开发人员,我怀疑这是一个 FindBugs 错误。看起来 OP 出于某种原因没有重新运行分析并查看旧报告。可能他使用了应该自动重新运行分析的 IDE,但由于某种原因没有这样做。或者他重新运行分析,但没有重新编译之前的代码(FindBugs 分析编译后的代码,而不是源代码),所以虽然他更新了源代码,但字节码仍然是旧的。
  • @TagirValeev,您可以将其添加为答案
【解决方案2】:

我有同样的错误。试试这个:

yourString.toLowerCase(Locale.getDefault());

【讨论】:

  • 这似乎不是一个好主意。 Locale.ENGLISH 可能是有目的的,你建议 OP 写一些随机的东西只是为了让 FindBugs 闭嘴。
【解决方案3】:

像下面这样使用,警告就会消失。

import org.apache.commons.lang3.StringUtils;
filename = StringUtils.upperCase(filename);

【讨论】:

  • 否决 - 如果您希望警告“消失”,您可以忽略 FindBugs 报告。
猜你喜欢
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
相关资源
最近更新 更多