-3

我被要求:编写一个函数,该函数boolean succeeds(char a, char b, String s)接受一个字符串 s,如果字符 b 的每次出现总是由字符 a 接续,则返回 true,否则返回 false。

我遇到了这个:

while (!s.equals("")) {
    char c = s.charAt(0);  // record first char
    s = s.substring(1);    // cut off first char


    // if "first char is 'b' and next is
    // not 'a'", we can return false
    if (c == b && (s.equals("") || s.charAt(0) != a))
        return false;                
}

return true;

我不能完全理解它吗?是什么s.equals""意思?

4

4 回答 4

1

第一次出现:

它正在检查是否s不是空白String

您可以在此处找到有关!运算符的信息,也可以在此处找到有关“equals()”的信息

于 2013-08-31T13:55:41.803 回答
0
while (!s.equals("")) {

这将简单地重复以下代码,直到s出现空字符串"". 由于每次迭代都会截断一个字符,这将继续截断字符,直到没有更多字符为止。

(s.equals("") || s.charAt(0) != a)

s.equals("")用于检查是否为空s字符串。这是必需的,因为如果它一个空字符串,那么s.charAt将失败。

运算符是短路的||,这意味着如果第一个表达式为真,则不会计算第二个表达式。

于 2013-08-31T13:57:13.937 回答
0

要理解为什么使用 String.equals()而不是==你需要了解一点 Java 是如何存储数据的。在 Java 中,您只能将两个原语(int、float、double)或两个指针相互比较==。字符串不是原始类型。如果您存储一个 int(或其他原始类型),它将存储数据本身。如果您存储一个对象,它将存储一个指向该对象实际所在位置的指针。如果你制作一个 String 对象

String a = new String( "I am a String!" );

它返回一个指向内存中其他地方的那个字符串的指针。现在我们用完全相同的文本创建另一个字符串:

String b = new String( "I am a String!" );

它返回一个指向不同位置的指针,因为它是一个不同的对象(注意new关键字)。如果您要比较a == b,它将返回 false。为什么?因为a与 String 对象不同b。它的指针不一样。如果你愿意

String c = b;

c将指向与 相同的 String 对象b。如果您比较它们 ( b == c),它将返回 true。

为了能够比较它们的内容,String 对象有一个.equals()方法。当内容a等于bin时返回 true a.equals( b )


回到这个问题。s.equals("")将创建一个没有内容的新字符串。出于上述原因,如果它会检查s == "",它总是会返回 false。

于 2013-08-31T14:28:36.337 回答
0

在 java 中,当您看到引号中没有任何内容的 "" 时,这意味着该对象的值是空的。

所以程序只有在字符串中有一些值(字符)时才会运行。

!= 表示不等于。!意味着没有。

这是在有人没有输入值时停止运行。

所以它说

而 String S ins 的值不等于程序将运行的任何值。

于 2013-09-01T04:23:13.910 回答