例如,搜索字符串“aabacbba”for the substring
“a”would return the index of
3`:
private int findString(String str, int start) {
// TODO: Implement string search
}
我不确定如何检查以确保字符串是单独的并重复。
答案 0 :(得分:0)
以下是一些可以帮助您的事情:
字符串具有s.charAt(i);
方法,该方法返回给定索引处的字符。
String还有一个length()
方法,可以返回它拥有的字符数量。
您可以使用for循环检查每个字符,看它是否与您想要的字符匹配。
for(int i = 0; i < line.length(); i++)
答案 1 :(得分:0)
使用substring()
和indexOf()
可以轻松实现
public static void main(String[] args) throws Exception {
String testString = "aabacbba";
System.out.println(findString(testString, 2, "c"));
}
private static int findString(String stringToSearch, int start, String stringToFind) {
int index = stringToSearch.substring(start).indexOf(stringToFind);
// Add start to the result of indexOf to have the actual index in the original string
// It'll return a -1 if no result is found
return index > -1 ? index + start : index;
}
结果:
findString(testString,2,&#34; a&#34;)=&gt;返回3
findString(testString,2,&#34; c&#34;)=&gt;返回4
findString(testString,2,&#34; d&#34;)=&gt;返回-1
findString(testString,1,&#34; bb&#34;)=&gt;返回5
在阅读关于检查以确保该字符在起始位置后出现一次的评论后,我已做出更新答案。
public static void main(String[] args) throws Exception {
String testString = "aabacbba";
System.out.println(findString(testString, 3, "b"));
}
private static int findString(String stringToSearch, int start, String stringToFind) {
int index = stringToSearch.substring(start).indexOf(stringToFind);
// Check the next character to make sure it's a single occurrence
if (index > -1 && stringToSearch.charAt(index + start + 1) == stringToFind.charAt(0)) {
index = -1;
}
// Add start to the result of indexOf to have the actual index in the original string
// It'll return a -1 if no result is found
return index > -1 ? index + start : index;
}
结果:
findString(testString,3,&#34; b&#34;)=&gt;返回-1,因为b重复
findString(testString,2,&#34; a&#34;)=&gt;返回3
findString(testString,2,&#34; c&#34;)=&gt;返回4
答案 2 :(得分:0)
我相信你会发现,对于一个角色,你将在第一个位置找到不重复的东西。我的理解是否正确?
一个简单的方法是使用正则表达式找出这样的字符。
e.g。
使用正则表达式+拆分
更短但更难处理int position = "aabacbba".split("(?<!a)a(?!a)")[0].length();
或正确使用匹配器:
Matcher m = Pattern.compile("(?<!a)a(?!a)").matcher("aabacbba");
m.find();
int position = m.start();
两者都会给你3
然而,使用String.chatAt(i)
用一点逻辑来找出它并不困难
伪造的代码
for (int i = 0; i < inputString.length; ++i) {
if (inputString[i] == charToFind
&& inputString[i-1] != charToFind
&& inputString[i+1] != chatToFind) {
return i;
}
}
return -1;
让你自己解决一个小陷阱:inputString[i-1]
和inputString[i+1]
可以超越界限。它应该很容易自己解决。
答案 3 :(得分:0)
这应该有效:
private static int findString(String sub, String str, int start) {
boolean isolated = true;
int i = str.indexOf(sub, start);
while (i >= 0) {
int end = i + sub.length();
int next = str.indexOf(sub, end);
if (next < 0 || isolated && next > end) {
break;
}
isolated = next > end;
i = next;
}
return isolated ? i : -1;
}