【问题标题】:How to convert contains to equals.ignorecase?如何将包含转换为equals.ignorecase?
【发布时间】:2015-09-14 11:19:08
【问题描述】:

我正在将一个文本文件读入我的程序,并让用户搜索一个字符串。我怎样才能使它不区分大小写?这是我的代码的 sn-p:

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

}

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

【问题讨论】:

标签: java string contains


【解决方案1】:

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

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

contains 的功能存在限制。它只检查CharSequences 并以区分大小写的方式进行。通过引入一个常见的大小写,这消除了区分大小写的问题。

【讨论】:

  • 作为对 OP 的说明:请不要在循环中调用 Val.toLowerCase()。创建一个自己的变量,在该循环之外保存“转换后的”字符串并使用它。
  • @Tom 一方面,我同意。另一方面,这可能是过早的优化,导致不必要地创建新变量并且根本不会更快。
  • @MrLister 因为toLowerCase 返回一个新字符串,如果Val 不是小写字母,它会更快*。另一方面,快多少取决于文件的大小。 (*) HotSpot 可能会取代该调用,但我不会等待或依赖它。
  • ...在这种简单的场景中,您为什么担心速度?如果此操作在其正常操作过程中完成数百万次,我会开始担心它的性能,但是在这里?我看不出有任何理由为此担心@Tom。
  • 谢谢你们的帮助!
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多