我正在尝试使用for循环和if语句查找用户输入s
是否包含第二个用户输入s1
。我只想使用方法.charAt()
和.length
而不是.indexOf
来查找s1是否在s内。在我发现s
是否包含s1
后,我要么返回.charAt()
s1
开始s
,或者返回-1
s1
内部根本不会发生s
。
例如,s = abcdefghi
& s1 = def
,它会返回3
。
这是我的代码到目前为止:
它会返回0
或-1
package javaapplication5;
import java.util.Scanner;
class myStrings {
String s, s1;
void setMyStrings(String str, String str1) {
s = str;
s1 = str1;
}
int find() {
int i, j;
int r = -1;
char ns = s1.charAt(0);
int sp;
int count = 1;
for (i = 0; i < s.length(); i++){
if (s.charAt(i) == ns) {
sp = i;//starting point
for (j = i+1; j < s1.length(); j++) {
ns += 1;
if (s.charAt(j) == ns){
j++;
count++;
}
if (count == s1.length())
r = sp;
}
}
}
System.out.println(r);
return r;
}
}
public class JavaApplication5 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
myStrings setS = new myStrings();
String s, s1;
System.out.print("Enter s:");
s = in.nextLine();
System.out.print("Enter s1:");
s1 = in.nextLine();
setS.setMyStrings(s1, s1);
setS.find();
}
}
答案 0 :(得分:1)
:D,这是因为你的主要方法中的这一行
setS.setMyStrings(s1, s1);
您添加相同的值。
如果我看起来不错,这一行
for (j = i+1; j < s1.length(); j++)
应写成:
for (j = i+1; j < i+1+s1.length(); j++)
这一行也错了
ns += 1;
ns是char,这意味着,例如将char A
更改为B
。你需要这样的东西:
ns = s1.charAt(j-i)
答案 1 :(得分:0)
所以你试图自己实现String.indexOf(String)
。
开始的地方(或者欺骗的方式,取决于你的目标是什么)将是在类String
中查看实际的JDK实现:它委托给一个包私有静态方法你想做什么:
static int indexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
// ...
答案 2 :(得分:0)
Java不是C,你不能用
转到下一个charns += 1;
您必须执行以下操作:
if (s.charAt(j) == s1.charAt(j-sp)){