查找一个字符串是不是与另一个字符串匹配

Posted

技术标签:

【中文标题】查找一个字符串是不是与另一个字符串匹配【英文标题】:Find whether a string matches another string查找一个字符串是否与另一个字符串匹配 【发布时间】:2013-05-16 12:26:03 【问题描述】:

我想解析一个字符串,看看它是匹配整个字符串还是子字符串。 我试过这个:

String [] array = "Example","hi","EXAMPLE","example","eXamPLe";
String word;
...
if ( array[j].toUpperCase().contains(word) ||  array[j].toLowerCase().contains(word)  )
System.out.print(word + " ");

但我的问题是:

当用户输入单词"Example"(区分大小写)并且在我的数组中有"Example" 它不打印它时,它只打印"EXAMPLE""example" 这是因为当我的程序比较两个字符串时它将我的array[j] 字符串转换为大写或小写,因此它不会匹配具有大写和小写的单词,例如单词“Example”。

所以在这种情况下,如果用户输入 "Examp" 我希望它打印:

Example EXAMPLE example eXamPLe

【问题讨论】:

用于...大学运动或其他什么的程序,或者这是一个现实世界的应用程序? 我的真实世界应用程序 定义它是如何成为现实世界的应用程序的。或者至少发布这只是真实代码的抽象只是为了让我们知道问题。 【参考方案1】:

如果您只是在寻找完整的匹配项,请使用equalsIgnoreCase

当需要部分匹配时,您可能需要trie 或类似的东西。

【讨论】:

当输入为"Examp"时检查最后一种情况。顺便说一句,不需要太复杂。来自 Apache Commons 的 StringUtils 已经处理了这个问题。 @LuiggiMendoza 谢谢,在算法标签中活得太久,对我来说是下意识的反应。 在这种情况下使用尝试就像使用断头台剪头发:)【参考方案2】:

您可以在调用 contains() 之前将输入字符串和候选字符串都转换为大写。

if ( array[j].toUpperCase().contains( word.toUpperCase() ) ) 
    System.out.print(word + " ");

【讨论】:

【参考方案3】:

比较word的相同情况。

if ( array[j].toUpperCase().contains(word.toUpperCase()))


【讨论】:

【参考方案4】:

好吧,我认为使用 .equalsIgnoreCase 的其他人可能也对 Matcher(Java 正则表达式)感兴趣。链接不言自明:http://www.vogella.com/articles/JavaRegularExpressions/article.html http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html Pattern/Matcher group() to obtain substring in Java? String contains - ignore case

【讨论】:

【参考方案5】:

你正在寻找这个:

if (array[j].toUpperCase().contains(word.toUpperCase())) 
    System.out.print(array[j]+ " ");

这将打印:

Example EXAMPLE example eXamPLe

如你所愿!

【讨论】:

【参考方案6】:

将此作为您的作业提交。你肯定会脱颖而出。

String word = "Exam";
String [] array = "Example","hi","EXAMPLE","example","eXamPLe";

for (String str : array)
  if (str.matches("(?i)"+word+".*"))
    System.out.print(str + " "); // prints: Example EXAMPLE example eXamPLe

【讨论】:

以上是关于查找一个字符串是不是与另一个字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

Bash - 获取命令(字符串)的值并查看它是不是与另一个字符串匹配

为啥python说一个字符串与另一个字符串不匹配[重复]

当没有匹配的记录时,如何将与另一个表连接的 group_concat 列更改为空字符串而不是 null?

Access 2010 SQL 查询仅在全字字符串中查找部分匹配

(访问)在文本字段中搜索与另一个表字段中的字符串匹配的字符串,并在子表单中显示这些匹配记录

需要 c# 正则表达式将逗号列表中的任何单词与另一个字符串中的任何单词匹配