我正在做一个java项目,需要确定一个字符串是否包含下面逻辑的另一个字符串:
有没有人可以帮助我如何以简单有效的方式编写逻辑,或者任何图书馆也非常感谢!
答案 0 :(得分:1)
让我们说“这是一个父字符串”是你的父字符串。和“isstr”是查询字符串。
对于不区分大小写的匹配,请将父字符串和查询字符串转换为小写。
您可以将父字符串拆分为关键字,并在查询字符串中查找每个关键字。
反转查询字符串(“isstr”)并将其推送到堆栈,因为您希望保留订单。
Stack<Character> stack = new Stack<Character>();
String reversedQueryString = new StringBuilder(queryString).reverse().toString();
for (char ch: reversedQueryString.toCharArray()) {
stack.push(ch);
}
当它们与父字符串中的字母匹配时,从查询字符串中弹出字母。在这种情况下,堆栈非常有用,因为我们不关心是否再次找到相同的字符。
String[] keywords = parentString.split(" "); \\ to split on spaces.
for(String keyword : keywords){
processKeyword(keyword);
}
void processKeyword(String keyword){
for (char c: keyword.toCharArray()) {
if(stack.top().equals(c)){
stackCheck();
}
}
}
void stackCheck(){
if(!stack.isEmpty())
stack.pop();
else{
System.out.println("Eureka");
}
}
这只是一个例子,您的实施可能会有所不同。例如,您可能希望检查关键字中的两个字符,以使其部分包含查询字符串。
答案 1 :(得分:1)
可能就是这么简单:
public boolean contains(final String base, final String search){
final String baseLowerCase = base.toLowerCase(Locale.ENGLISH);
for(final char c : search.toLowerCase(Locale.ENGLISH).toCharArray())
if(baseLowerCase.indexOf(c) < 0)
return false;
return true;
}
例如:contains("This is a parent string", "isstr");
返回true
。
您在这里尝试做的是将您要搜索的String
转换为您将在其中进行迭代的char[]
。然后,您要查看基本String
是否包含char
(使用String#indexOf(char)
)。您希望在第一次出现时返回false
,但不包含char
(意味着String#indexOf(char)
返回值<0)
答案 2 :(得分:0)
public static void main(String[] args) {
String parentStr = "This is a parent string", childStr = "iSStr";
//Turn both to lowcase.
parentStr.toLowerCase(); childStr.toLowerCase();
Integer childStrIndex = 0;
//Run over the parent string and if you found a match then keep comparing with the next
//character in the child string.
for (int index = 0 ; index < parentStr.length(); index++) {
Character currChar = parentStr.charAt(index);
if (childStr.length() <= childStrIndex)
break;
if (currChar.equals(childStr.charAt(childStrIndex)))
childStrIndex++;
}
// If at the end you are in the last character of the child string, then is true.
if (childStrIndex >= childStr.length())
System.out.print(true);
else
System.out.print(false);
}
希望这会有所帮助。 BTW这听起来像是家庭作业。
答案 3 :(得分:0)
搜索将涉及回溯,因此如果您要手动实现,则可能需要递归解决方案。
但一个简单的方法是将输入字符串预处理为正则表达式,然后执行正则表达式“查找”。例如,如果搜索字符串是“instr”,则正则表达式可以是"[iI].*[nN].*[sS].*[tT].*[rR]"
。
请注意,这种搜索不可避免地会变得昂贵,如果使用正则表达式进行搜索则更是如此。实际上,一个简单的实现是O(M^N)
,其中M
是输入字符串的长度,N
是搜索字符串的长度。