2013-10-30 108 views
0

我试图找出用户输入s是否包含使用for循环和if语句的第二个用户输入s1。我只想使用方法.charAt().length而不是.indexOf来查找s1是否在s内。一旦找到s是否包含s1,我要么返回.charAt(),其中s1开始于s,要么返回-1,如果s1完全不在s内部发生。如何在Java中使用for循环在字符串中查找字符串?

例如,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(); 

} 

}

回答

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) 
0

所以你试图自己实现String.indexOf(String)

一开始的地方(或方式来欺骗,这取决于你的目标是什么)将是看看实际JDK实施String类:其委托给其做了包私有静态方法正是你”重新尝试做:

static int indexOf(char[] source, int sourceOffset, int sourceCount, 
        char[] target, int targetOffset, int targetCount, 
        int fromIndex) { 
    // ... 
0

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

ns += 1; 

你必须做一些事情,如:

if (s.charAt(j) == s1.charAt(j-sp)){ 
+0

即使在C中,这也是错误的,因为当内部循环无法找到字符串时,您没有重新初始化ns。 – Tyco