0

我正在尝试使用 for 循环和 if 语句查找用户输入是否s包含第二个用户输入。s1我只想使用方法.charAt().length不是.indexOf查找 s1 是否在 s 内。一旦我找到是否s包含s1,我要么想返回.charAt()where s1begin in s,要么返回-1如果s1根本没有出现 inside 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();

}

}

4

3 回答 3

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 更改AB. 你需要这样的东西:

ns = s1.charAt(j-i)
于 2013-10-30T23:31:01.630 回答
0

所以你正在尝试实现String.indexOf(String)自己。

一个开始的地方(或一种作弊的方法,取决于你的目标是什么)将是查看 class 中的实际 JDK 实现String:它委托给一个包私有静态方法,该方法正是你想要做的:

static int indexOf(char[] source, int sourceOffset, int sourceCount,
                   char[] target, int targetOffset, int targetCount,
                   int fromIndex) {
    // ...
于 2013-10-30T23:33:27.360 回答
0

Java不是C,你不能去下一个字符

ns += 1;

您必须执行以下操作:

if (s.charAt(j) == s1.charAt(j-sp)){
于 2013-10-30T23:34:31.050 回答