我做错了什么

时间:2014-03-25 13:51:16

标签: java string

我制作了一个程序来搜索另一个字符串中的某个字符串,如果条件为真则打印Word,如果条件为假则打印未找到打印字

逻辑如下

输入单词 字的长度 寻找信[1] 如果是真的 然后直到词的长度与要搜索的字符串相匹配

否则继续循环

但无论输入什么,我总是得不到发言,请在这里帮助我!!!

代码如下: -

    import java.util.Scanner;
    class Search_i_String
    {        
        public static void main(String args[])
        {
            int flag=0;
            Scanner Prakhar=new Scanner(System.in);
            System.out.println("Enter a String");
            String ori=Prakhar.nextLine();
            System.out.println("Enter the String to be Searched");
            String x=Prakhar.nextLine();
            char a[]=new char[ori.length()];
            char b[]=new char[x.length()];
            for(int i=0;i<ori.length();i++)
            {
                a[i]=ori.charAt(i);
            }
            for(int i=0;i<x.length();i++)
            {
                b[i]=x.charAt(i);
            }

            for(int i=0;i<a.length;i++)
            {
                if (a[i]==b[0])
                {
                    for(int j=0;j<b.length;j++)
                    {
                        while(flag==0)
                        {
                            if(b[j]==a[i])
                            {
                                flag=0;
                            }
                            else if(b[j] != a[i])
                            {
                                flag=1;
                            }
                            i++;
                        }
                    }
                }
            }
            if (flag==0)
            {
                System.out.println("Word Found !!!");

            }
            else 
            System.out.println("Word not Found");
        }

    }

P.S。 :我知道我可以使用contains()函数,但我可以像我的教授建议反对它,有人可以请更正我写的程序,因为我可以从互联网上清除一个程序,如果我不得不,我只是我想用自己的逻辑

谢谢(再次)

5 个答案:

答案 0 :(得分:0)

while(flag==0)
{
  if(b[j]==a[i])
  {
    flag=0;
  }
  else if(b[j] != a[i])
  {
    flag=1;
  }
  i++;
  j++; //add this and try once 
}

答案 1 :(得分:0)

如果要比较Java中的字符串,则必须使用equals();

所以,stringA.equals(stringB);

干杯!

答案 2 :(得分:0)

您可以使用String.contains();

如果你真的想要实现一个方法,试试这个:

public static void main(String[] args) {

    // Initialize values searchedWord and original by user
    String original = [get original word from user] ;
    String searchedWord = [get searched for word from user];

    boolean containsWord = false;
    int comparePosition = 0;


        for(int i = 0; i < original.length() - searchedWord.length(); i++) {
            if(original.charAt(i) == searchedWord.charAt(comparePosition)) {
                comparePosition += 1;
            } else {
                comparePosition = 0;
            }
            if(comparePosition == searchedWord.length()) {
                containsWord = true;
                break;
            }
        }

    return containsWord? "Word found!!" : "Word not found.";
}

答案 3 :(得分:0)

让我直截了当。您在b数组中寻找a数组? &#34;输入要搜索的字符串&#34;意味着你正在寻找相反的方式,但我会遵循你的代码似乎遵循的逻辑......这是一种天真的方式:

            if (a[i]==b[0])
            {
                flag = 0;
                for(int j=0;j<b.length;j++)
                {
                    if(b[j] != a[i+j])  // will array index out of bounds when its not foud
                    {
                        flag++;  // you should probably break out of a named loop here
                    }

                }
                if(flag == 0){/*win*/}
            }

当您不必要时,您正在使用变量i修改您的第一个搜索循环。你可以把我添加到j。另外,如果我理解你的问题,你就不需要内部的while循环。像其他人所说的那样,功能已经存在。该算法甚至没有尽可能高效。

我知道一种算法,您可以从b中的最后一个字符开始检查,而不是b中的第一个字符。然后,您可以使用该信息更快地移动搜索。如果不诉诸完整的伪代码,任何人都知道这些被称为什么?

答案 4 :(得分:0)

简单的方法(但不是最快的方法)是使用双循环逐个检查字符串中的字符,请参考我的代码和注释:

public class SearchString {

public static void main(String[] args) {
    String a = "1234567890";
    String b = "456";
    // Use toCharArray() instead of loop to get chars.
    search(a.toCharArray(), b.toCharArray());
}

public static void search(char[] a, char[] b) {
    if (a == null || b == null || a.length == 0 || b.length == 0) {
        System.out.println("Error: Empty Input!");
        return;
    }

    int lenA = a.length, lenB = b.length;

    if (lenA < lenB) {
        System.out
                .println("Error: search key word is larger than source string!");
        return;
    }

    // Begin to use double loop to search key word in source string
    for (int i = 0; i < lenA; i++) {
        if (lenA - i < lenB) { // If the remaining source string is shorter than key word.
                               // Means the key word is impossible to be found.
            System.out.println("Not found!");
            return;
        }
        // Check the char one by one.
        for (int j = 0; j < lenB; j++) {
            if (a[i + j] == b[j]) {
                if (j == lenB - 1) { // If this char is the last one of key word, means it's found!
                    System.out.println("Found!");
                    return;
                }
            } else {
                // If any char mismatch, then right shift 1 char in the source string and restart the search
                break;
            }
        }
    }

}

}