我制作了一个程序来搜索另一个字符串中的某个字符串,如果条件为真则打印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()函数,但我可以像我的教授建议反对它,有人可以请更正我写的程序,因为我可以从互联网上清除一个程序,如果我不得不,我只是我想用自己的逻辑
谢谢(再次)
答案 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;
}
}
}
}
}