- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在大学参加了微软编码挑战,提出的问题是:
Write a program that takes two strings as input, one is a query, and the other is a string that may or may not contain that query. Your program needs to find if the query is contained within the body string.
1) The query should only match the body text if it matches the start of a word within the body text.
2) That is, the beginning of the query must also be the start of a word within the body text. For example, the query "cat" would match the strings "cat", "cat toy", "this is a cat", and "catty". However, the query "cat" would not match the string "location".
3) Your program should be case insensitive.
4) Your program needs to be able to match queries without spaces in them, even if the body does have spaces. For example, the string "Luke Johnston" would be matched by the query "luke j" and the query "lukej".
5) However, this does not work the other way around. The query "luke j" should not match the string "lukejohnston".
我能够编写满足前 4 个要求的代码,但我无法找到第 5 个要求的解决方案。任何提示/帮助表示赞赏。这是我的代码版本。
package regex;
import java.util.Scanner;
public class TextQueryMatch {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Enter the Text: ");
String text = in.nextLine();
text = text.toLowerCase();
String[] substexts = text.split("\\s");
text = "";
for(int i = 0; i < substexts.length; i++){
char capLetter = Character.toUpperCase(substexts[i].charAt(0));
text += capLetter + substexts[i].substring(1, substexts[i].length());
}
System.out.println(text);
System.out.print("Enter the Query: ");
String query = in.nextLine();
query = query.toLowerCase();
String[] subquerys = query.split("\\s");
query = "";
for(int i = 0; i < subquerys.length; i++){
char capLetter = Character.toUpperCase(subquerys[i].charAt(0));
query += capLetter + subquerys[i].substring(1, subquerys[i].length());
}
System.out.println(query);
System.out.print("Match: ");
if(text.matches("(.*)"+query.charAt(0)+"(.*)")){
text=text.toLowerCase();
query=query.toLowerCase();
System.out.print(text.matches("(.*)"+query+"(.*)"));
}else{
System.out.print("False");
}
}
}
最佳答案
我认为将查询转换为正则表达式就足以满足所有给定的条件。
根据问题,
根据第 1 点和第 2 点,仅当查询字符串位于文本开头或空格后面时,查询才应与文本匹配。所以基本上这个正则表达式会是这样的 -
(^|\s)(query-string)
第3点需要查询不区分大小写,这可以在编译查询正则表达式时处理。
对于第 4 点和第 5 点 - 即使查询没有空格,查询也应该与文本匹配,但如果查询中存在空格,则它应该在文本中正确匹配。
因此,我们需要以这样的方式转换我们的正则表达式,即在每个字符(或空格)之后,正则表达式可以处理可能存在或可能不存在的空格。这样,我们假设字符(或空格) ) 必须匹配,而其后面的空格是有条件的。
这应该有效 -
public static boolean find_match(String query, String text){
String regex = "(?:^|\\s)(" + query.replaceAll(".(?!$)", "$0(?:\\\\s*)") + ")";
//System.out.println("Regex -> " + regex);
Pattern re = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
return re.matcher(text).find();
}
测试此功能 -
public static void main(String []args){
String query1 = "cat";
String[] text1 = {
"Cat",
"caT toy",
"This is a CaT",
"caTty",
"loCation"
};
for(String s : text1){
System.out.println("Query -> " + query1 + "\nText -> " + s + "\n" + find_match(query1, s) + "\n");
}
String query2 = "luke j";
String query3 = "lukej";
String[] text2 = {
"Luke Johnson",
"lukejohnson",
"Luke Johson",
"This is Luke Johnson",
"L ukeJohnson",
"L uke Johnson"
};
for(String s : text2){
System.out.println("Query -> " + query2 + "\nText -> " + s + "\n" + find_match(query2, s));
System.out.println("Query -> " + query3 + "\nText -> " + s + "\n" + find_match(query3, s) + "\n");
}
}
输出 ->
Query -> cat
Text -> Cat
true
Query -> cat
Text -> caT toy
true
Query -> cat
Text -> This is a CaT
true
Query -> cat
Text -> caTty
true
Query -> cat
Text -> loCation
false
Query -> luke j
Text -> Luke Johnson
true
Query -> lukej
Text -> Luke Johnson
true
Query -> luke j
Text -> lukejohnson
false
Query -> lukej
Text -> lukejohnson
true
Query -> luke j
Text -> Luke Johson
true
Query -> lukej
Text -> Luke Johson
true
Query -> luke j
Text -> This is Luke Johnson
true
Query -> lukej
Text -> This is Luke Johnson
true
Query -> luke j
Text -> L ukeJohnson
false
Query -> lukej
Text -> L ukeJohnson
true
Query -> luke j
Text -> L uke Johnson
true
Query -> lukej
Text -> L uke Johnson
true
希望这有帮助 -
关于java - 文本查询匹配(棘手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21817236/
我有以下两个表: T1(身份证,名字)T2 (id,hybrid_col) 我想做的是从 T2 中选择所有内容,如果 hybrid_col 是数字,则使用 T1 加入。基本上,hybrid_col 持
这是代码:https://play.golang.org/p/Sizbc3uJt_c 我尝试替换这个简单的循环 for c := n.FirstChild; c != nil; c = c.NextS
我在大学参加了微软编码挑战,提出的问题是: Write a program that takes two strings as input, one is a query, and the other
我需要比较以下函数的增长率: f(n)=2^n 和 g(n)=n^log(n)(当 n 接近正无穷大时)。 这可能吗? 最佳答案 令 n = 2^k。我们有: 2^n = 2^(2^k) n^log(
我的服务器快满了,我需要自动删除文件。文件通常每天都会添加到我的服务器,但有时会有暂停,使它们每两周或每月一次。他们停止进来几个月然后又开始了,这是不可预测的。 我的脚本需要删除超过 30 天的文件但
我无法获得适用于 SonarQube 4.0 的代理配置,以便我可以安装插件。 当我打开 http://localhost:9000/updatecenter/available它显示错误:“未连接到
标题不是很清楚,但很难描述我遇到的问题。 让我们考虑一个实现了 == 和 != 方法的 Signal 类。 (这是我的简化版)。 import numpy as np class Signal:
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我想将焦点设置到我网站上的文本字段。有两个问题: 文本字段位于外部页面(我无法控制)。它使用 iframe 嵌入到我的页面中。 每次加载页面时,文本字段都会生成一个自己的随机 ID。 这是我想要聚焦的
我有一个非常棘手的问题,我现在正试图弄清楚它, 我有这个查询结果集 SELECT * FROM Orders OrderID | OrderAmount | OrderDate | E
当我启动 webkit 浏览器实例并输入 http://localhost 时,$this.innerWidth()的结果是对的(我用的是jQuery)。 但是如果我尝试刷新页面, $this.inn
首先我知道有很多人问过这个问题!但我还有一个问题。 我正在做的是,通过 phpmyadmin 将我的数据库 (MySql) 导出到 .sql 文件。没问题。当我尝试将其导入“SQLite Databa
我这里有一个棘手的问题..请帮助.. 我有一个名为“DemoViewController”的 ViewController,两个不同的 Xib(Demo1Controller.xib 和 Demo2C
哦,嗨。我是一名初级 Java 开发人员,在空闲时间从事一些基于 2D 图 block 的游戏。现在我正在尝试实现游戏模型中非常基本的东西 - 各种类型的对象如何彼此交互。我希望有一天添加网络支持,所
假设我有以下两个表: PRICE price_id price room_id nr_of_people 1 80 1
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在开发一个 jQuery 插件,人们可以将其包含在自己的页面中。该插件在我正在操作的位于不同域的服务中生成作业。 为了突破域边界,我使用 jQuery 的 JSONP 功能,它可以很好地生成作业。
我看到很多开发人员只是盲目地按照分步说明将 JAX-WS RI jar 复制到 Tomcat 认可文件夹。也没有看到有人问为什么。 1) 如果 JDK 6 update 4+ 已经包含 JAX-WS
我找不到解决这个问题的方法。 这是我想要的渲染图: http://jsfiddle.net/kQSxb/ HTML: Lorem ipsum dolor s
我是一名优秀的程序员,十分优秀!