尝试搜索patterns of letters in a file
,该模式由用户输入并以String
的形式出现,到目前为止,我已经通过不确定如何进行测试来找到第一个字母查看下一个字母是否也匹配该模式。
这是我目前的循环。任何帮助将不胜感激
public void exactSearch(){
if (pattern==null){UI.println("No pattern");return;}
UI.println("===================\nExact searching for "+patternString);
int j = 0 ;
for(int i=0; i<data.size(); i++){
if(patternString.charAt(i) == data.get(i) )
j++;
UI.println( "found at " + j) ;
}
}
答案 0 :(得分:1)
您需要遍历第一个字符串,直到找到另一个字符串的第一个字符。从那里,您可以创建一个内部循环,并像上面一样在两个循环上同时进行迭代。 提示:由于字符串的大小可能不同,因此请务必注意边界。
答案 1 :(得分:1)
您可以尝试以下方法:-
String a1 = "foo-bar-baz-bar-";
String pattern = "bar";
int foundIndex = 0;
while(foundIndex != -1) {
foundIndex = a1.indexOf(pattern,foundIndex);
if(foundIndex != -1)
{
System.out.println(foundIndex);
foundIndex += 1;
}
}
indexOf
-第一个参数是模式字符串,
第二个参数是我们必须搜索的起始索引。
如果找到了模式,它将返回匹配模式的起始索引。
如果未找到模式,indexOf
将返回-1。
答案 2 :(得分:1)
String data = "foo-bar-baz-bar-";
String pattern = "bar";
int foundIndex = data.indexOf(pattern);
while (foundIndex > -1) {
System.out.println("Match found at: " + foundIndex);
foundIndex = data.indexOf(pattern, foundIndex + pattern.length());
}
答案 3 :(得分:0)
根据您的请求,您可以使用以下算法搜索您的职位:
1)我们检查是否到达字符串的末尾,为避免发生invalidIndex
错误,我们验证剩余子字符串的大小是否小于pattern's
的长度。
2)我们在每次迭代时计算子字符串,并使用pattern
验证字符串。
List<Integer> positionList = new LinkedList<>();
String inputString = "AAACABCCCABC";
String pattern = "ABC";
for (int i = 0 ; i < inputString.length(); i++) {
if (inputString.length() - i < pattern.length()){
break;
}
String currentSubString = inputString.substring(i, i + pattern.length());
if (currentSubString.equals(pattern)){
positionList.add(i);
}
}
for (Integer pos : positionList) {
System.out.println(pos); // Positions : 4 and 9
}
编辑:
也许可以对其进行优化,而不是使用Collection
来完成此简单任务,但是我使用LinkedList
来编写一种更快的方法。