2013-10-30 106 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