比较两个字符串

时间:2011-03-05 08:11:52

标签: java string reverse

我有以下代码:

    int t = s.length()-1;
    int g = 0;

    for (int i=0; i < s.length(); i++){

        if (s.charAt(i) != h.charAt(t--));
            g++;

    }

    if (g==0)
        return true;

    else 
        return false;

基本上这个代码假设要测试字符串h的inverse是否等于string s,反之亦然。由于某种原因,总会返回“假” - 尽管明显的答案是正确的。

任何人都可以告诉我我的代码有什么问题吗?

谢谢!

4 个答案:

答案 0 :(得分:8)

我会说额外的;是罪魁祸首。

而不是

if (s.charAt(i) != h.charAt(t--));

使用

if (s.charAt(i) != h.charAt(t--))

你应该总是走“安全”的路线。也就是说,在 if-else 语句之后使用大括号(几乎可以在任何地方使用它们),所以这样的错误不会发生在第一位。写它的正确方法是:

if (s.charAt(i) != h.charAt(t--)) {
   g++;
}

顺便说一句,如果您不先检查sh是否具有相同的长度,您的代码就会爆炸。

答案 1 :(得分:3)

;中的

额外if (s.charAt(i) != h.charAt(t--));可能会产生问题

使用

if (s.charAt(i) != h.charAt(t--))
{
  g++;
  break; // if not match, not need to continue with loop
}

答案 2 :(得分:1)

除非这是一个学习练习,否则我建议你不要自己编写循环并使用一些库代码。你可以这样做:

String s = "abcd";
String h = "dcba";

System.out.println( h.equals( new StringBuffer(s).reverse().toString() ) );

StringUtils#reverse


在引擎盖下,这些循环穿过字符串的方式与您正在进行的方式非常相似。代码在AbstractStringBuilder,如果你想看看。

答案 3 :(得分:0)

如果没有相同的字符,请使用break;退出循环

bool g = true;
for(.....)
{
   if (s.charAt(i) != h.charAt(t--))
   {
      g = false;
      break;
   }
}
return g;

它会提高你的表现