【发布时间】:2019-05-29 01:35:59
【问题描述】:
我正在实施 DFA。给定的字母是 {a, b}。
我知道输入字符串是否被接受。 (它有一个简单的“接受”规则——输入字符串的第一个和最后一个字符必须相同)
不过,我要做的是检查输入字符串中的每个字符是否按照规定的“字母表”被允许。
因此,作为布尔值,如果输入字符串是“abcdefg”(例如),它将返回 false……如果输入字符串是“abbaabbbbba”(例如),它将返回 true
我需要检查 a 是否在字母表中...然后如果 b 在字母表中...然后如果 c 在字母表中...对于输入字符串中的每个字符等等。
我尝试过不同种类的循环变体,(我不记得每一个变体!)将 inputString.charAt(i) 与字母表中的每个字符进行比较......但到目前为止,没有什么像我需要的那样工作/想要它。
例如,我现在正在尝试:
public boolean isInAlphabet(String inputString) {
if(inputString == " ") {
System.out.println(" -> empty string is not in our alphabet");
return false;
}
for(int i = 0; i < inputString.length(); i++) {
Character check = inputString.charAt(i);
System.out.print(check); // just to see what it's doing
if(check.equals(alphabet.charAt(0)) || check.equals(alphabet.charAt(1))) {
System.out.println(" -> your input string is in our alphabet");
return true;
}
else{
System.out.println(" -> your input string is *not* in our alphapet");
return false;
}
}
return false;
}
字母表表示为:
String alphabet = "ab";
输入字符串如下:
String inputString = "abcdefg";
问题是,它在发现输入字符串中的第一个字符在字母表中后停止检查。
喜欢:
test input string: abcdefg
is test input string in our alphabet?
a -> your input string is in our alphabet
...这就是它所做的所有进一步检查。
如何让它检查整个输入字符串——输入字符串的每个字符,对照字母表?
就像我说的,我什至不记得到目前为止我尝试过的所有事情,但至少有十几个。我越尝试越困惑。这感觉很简单,但我不知道如何让它发挥作用。
【问题讨论】:
-
将
System.out.println(" -> your input string is in our alphabet");return true;移出for循环并用它替换最后一个return false。因为你只想return true;在你检查了每一个字母并且每一个都通过之后。 -
好吧,废话...我知道这很容易。谢谢 - 这是有效的!我现在觉得自己像个白痴。我应该在两个小时前问...哈哈!
-
if(inputString == " ")不是你在 java 中比较字符串的方式 -
另外,考虑使用:
alphabet.indexOf(check)。这将允许您使用任何长度的字母表。 -
如果字母不在字符串中,它将返回
-1。所以if (alphabet.indexOf(check) == -1) { // Not in string....}