我被要求:编写一个函数boolean succeeds(char a, char b, String s)
,它接受一个字符串s并返回true
如果字符b的每次出现总是由字符a继承,否则为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""
是什么意思?
答案 0 :(得分:1)
答案 1 :(得分:0)
while (!s.equals("")) {
这将只重复以下代码,直到s
为空字符串""
。由于每次迭代都会切断一个字符,因此这将不断删除字符,直到不再有字符为止。
(s.equals("") || s.charAt(0) != a)
s.equals("")
用于检查s
是否为空字符串。这是必需的,因为如果 为空字符串,则s.charAt
将失败。
||
运算符是短路的,这意味着如果第一个表达式为真,则第二个表达式不会被评估。
答案 2 :(得分: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
与b
不是同一个String对象。它的指针是不同的。如果你愿意的话
String c = b;
c
将指向与b
相同的String对象。如果你要比较它们(b == c
),它将返回true。
为了能够比较它们的内容,String对象具有.equals()
方法。当内容a
等于b
中的a.equals( b )
时,它会返回true。
回到这个问题。 s.equals("")
将创建一个没有内容的新String。对于上面的推理,如果检查s == ""
它将始终返回false。
答案 3 :(得分:0)
在java中,如果看到引号中没有任何内容,则表示该对象的值为空。
因此,只有在字符串中有一些值(字符)时,程序才会运行。
!=表示不等于。 !意思不是。
当有人没有输入值时,这会停止运行。
所以它说
虽然String S的值不等于程序将运行的任何内容。