2015-06-27 95 views
1

我正在将文本文件读入我的程序,并让用户搜索字符串。我怎样才能使它不区分大小写?这里是我的代码片段:如何将包含转换为equals.ignorecase?

while (str1.hasNextLine()) 
{ 
    String line = str1.nextLine(); 
    line = line.replace(";", " "); 
    if(line.contains(Val)) 
    { 
     System.out.println(line); 
    } 

} 

Val是字符串变量。它是用户输入的字符串,以及在文本文件中找到的字符串将在行上打印出来。但我需要它是不区分大小写的。出于某种原因,当我使用equals.IgnoreCase时,它不起作用。

+2

['equalsIgnoreCase'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String))has no dot – FDinoff

+0

其他选项在这里你可以避免创建中间字符串:参见[这里](http://stackoverflow.com/questions/86780/is-the-contains-method-in-java-lang-string-case-sensitive)和[这里]( http://stackoverflow.com/questions/14018478/string-contains-ignore-case)。 – sstan

回答

6

在这种情况下,将所有事情统一起来并进行比较。

if (line.toLowerCase().contains(Val.toLowerCase())) { 
    // logic 
} 

contains可以做些什么有限制。它只检查CharSequences,并以区分大小写的方式进行检查。通过引入常见情况,可以消除大小写敏感问题。

+3

作为OP的说明:请不要在循环中调用'Val.toLowerCase()'。创建一个自己的变量,该变量在该循环外部保存“已转换”的字符串并使用该变量。 – Tom

+1

@Tom一方面,我同意。另一方面,这可能是不成熟的优化,导致不必要的创建一个新的变量,而不是更快。 –

+0

@MrLister由于'val'不是小写字母,所以'toLowerCase'返回一个新的字符串,它更快*。另一方面,更快的速度取决于文件的大小。 (*)HotSpot可能会取代该呼叫,但我不会等待或依赖该呼叫。 – Tom

相关问题