2015-07-05 46 views
1

我有下面這段代碼:如何修復FindBugs的警告「使用非本地化的String.toUpperCase()或String.toLowerCase()」?

/** 
* 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) 

我怎樣才能正確地解決這一警告(正確的方法),如果我可以肯定的是所有文件名將始終只有帶拉丁字母的名稱?

+0

由於您感興趣的所有字符都以英文字母表示,因此您可以忽略該警告。或者,不要將字符串轉換爲小寫字母,而應使用不區分大小寫的正則表達式。 – biziclop

+3

添加Locale.ENGLISH(或Locale.ROOT)是修正錯誤的正確方法,因此如果在執行此操作後仍然發生錯誤,那麼您可能在FindBugs本身中發現了一個錯誤。 –

+0

@bkail謝謝。請提交您的評論作爲答案,我會接受它。 –

回答

3

添加Locale.ENGLISH(或Locale.ROOT)是修正錯誤的正確方法,因此如果FindBugs在添加該錯誤後仍然報告該錯誤,那麼您可能在FindBugs本身中發現了一個錯誤。

+0

作爲FindBugs開發人員,我懷疑這是一個FindBugs錯誤。看起來OP由於某種原因沒有重新運行分析並查看舊報告。可能他使用的IDE應該自動重新運行分析,但由於某種原因沒有這樣做。或者他重新運行分析,但在它之前沒有重新編譯代碼(FindBugs分析編譯的代碼,而不是源代碼),所以在更新源代碼時,字節代碼仍然舊。 –

0

像下面一樣使用,警告就會消失。

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