检查字符串是否包含字(不是子字符串!)
有没有办法检查子字符串是否包含完整的WORD,而不是子字符串。检查字符串是否包含字(不是子字符串!)
的Envision以下情形:
public class Test {
public static void main(String[] args) {
String[] text = {"this is a", "banana"};
String search = "a";
int counter = 0;
for(int i = 0; i < text.length; i++) {
if(text[i].toLowerCase().contains(search)) {
counter++;
}
}
System.out.println("Counter was " + counter);
}
}
这个计算结果为
Counter was 2
这是不是我要找的,因为在“A”这个词只有一个实例阵列。
我读它是如下的方式:
的IF试验发现一个“A”在文本[0]中,“A”对应于“这是[A]”。但是,它也会在“香蕉”中找到“a”,从而增加柜台。
我该如何解决这个问题,只包含WORD'a',而不是包含?的子串?
谢谢!
你可以使用正则表达式,使用Pattern.quote逃脱了任何特殊字符。
String regex = ".*\\b" + Pattern.quote(search) + "\\b.*"; // \b is a word boundary
int counter = 0;
for(int i = 0; i < text.length; i++) {
if(text[i].toLowerCase().matches(regex)) {
counter++;
}
}
注意,这也将在"this is a; pause"
或"Looking for an a?"
找到"a"
其中a
并不之后有一个空格。
' if(text [i] .toLowerCase()。matches(regex)){' – Nirekin
@Guillaume谢谢。 –
谢谢! 但是,我收到消息“方法quote(字符串)未定义的类型模式”)。 – northerner
如果的话都用空格隔开,那么你可以做:
if((" "+text[i].toLowerCase()+" ").contains(" "+search+" "))
{
...
}
这增加了两个空间,以原始字符串。
例如:"this is a"
变为" this is a "
。
然后它搜索单词和侧翼空格。 例如:它搜索" a "
时search
是"a"
如果a处于开始或结束状态,该怎么办? – Nadir
@Nadir这正是我们为什么要添加空格! – Hackerdarshi
@Nadir看到这个:**“”** + text [i] .toLowerCase()+ **“”** – Hackerdarshi
可以试试这样:
for(int i = 0; i < text.length; i++) {
String[] words = text[i].split("\\s+");
for (String word : words)
if(word.equalsIgnoreCase(search)) {
counter++;
break;
}
}
Arrays.asList("this is a banana".split(" ")).stream().filter((s) -> s.equals("a")).count();
当然,正如其他人写的,你就可以开始用各种模式的玩弄于比赛“字”出“文”。
但事情是:根据你必须解决的基本问题,这可能(目前)不够好。意思是:你是否面临在某些字符串中找到某种模式的问题...或者是否真的需要用“人类语言”的意义解释该文本?你知道,当有人写下文字时,可能会有微妙的错别字,怪异的字符;所有这些使得很难在文本中“找到”某个单词的东西。除非您深入了解事物的“语言处理”方面。长话短说:如果你的工作是“在字符串中找到某些模式”;那么所有其他答案都会做。但是如果你的要求超出了这个范围,就像“某些人将会使用你的应用程序'搜索'庞大的数据集”;那么你最好现在停下来;并考虑转向支持全文的搜索引擎,如ElasticSearch或Solr。
查看我的回答 –