我正在尝试编写一个java程序,它接受一个字符串输入并检查它是否有效。决定的规则是:
1)当且仅当它包含单词“pi”,“ka”,“chu”作为其片段时,该字符串是可识别的,以任何顺序重复任何次数。 2)如果它包含任何其他片段(或子序列),那么它是无法识别的
对于前“皮卡丘”只有“pi”,“ka”,“chu”的一致,所以它是可识别的。 “kachupi”仅由“ka”,“chu”,“pi”组成,因此它是可识别的。 “pipi”也可识别“因为它包含”pi“两次。 “pich”无法识别,因为“ch”不是指定的子序列之一。
我在下面发布我的java代码。但它没有正常工作。请检查并提供帮助。 提前谢谢!
import java.util.Scanner;
public class RecognisingWords {
public static void main(String[] args) throws Exception
{
Scanner inp= new Scanner(System.in);
String str;
int len;
System.out.println("Enter the string to be tested:");
str=inp.nextLine();
System.out.println(str);
while(str !=null)
{
if(str.startsWith("pi"))
{
len=str.length();
str= str.substring(2,len);
}
else if(str.startsWith("ka"))
{
len=str.length();
str= str.substring(2,len);
}
if(str.startsWith("chu"))
{
len=str.length();
str= str.substring(3,len);
}
else
{
System.out.println("Unrecognisable Sequence");
break;
}
}
if(str == null)
{
System.out.println("Recognisable Sequence");
}
}
}
答案 0 :(得分:2)
您需要进行两项更改:
首先,改变
if(str.startsWith("chu"))
到
else if (str.startsWith("chu"))
否则像“pipi”这样的字符串将无法通过测试。
第二,
while(str !=null)
永远不会失败,因为str
永远不会是null
。你需要测试空虚:
while (str.length() > 0)