0

我正在编写代码,只要字符串中有一个“.xyz”,它就会返回false,但是如果有一个没有句点的xyz,它就会返回true。大多数测试都通过了,除了这个:

xyzThere("abc.xyzxyz")

有没有办法修复这个测试,让它也通过?我的代码如下。

public boolean xyzThere(String str) {
  for (int i = 0; i < str.length() - 2; i++) {
    if (str.charAt(i) == '.') {
      if (str.substring(i+1, i+4).equals("xyz")) {
        return false;
      }
    }
    else if (str.substring(i, i+3).equals("xyz")) {
      return true;
    }
  }
  return false;
}
4

2 回答 2

0

我会使用正则表达式。如果您担心性能,请在方法之外创建模式。写吧

private boolean xyzThere(String string) {
    return string.matches("xyz.*|.*[^.]xyz.*");
}

你会没事的。

于 2013-03-17T14:33:37.593 回答
0

我假设您想要返回包含“.xyz”false的任何内容,除非它还包含“xyz”。String

为此,您首先检查“.xyz”——如果它不存在,那么我们就完成了。如果它在那里,则删除所有“.xyz”并简单地检查“xyz”

public static void main(String[] args) {
    System.out.println(hasXyz("abc"));
    System.out.println(hasXyz("abc.xyz"));
    System.out.println(hasXyz("abcxyz"));
    System.out.println(hasXyz("abc.xyzxyz"));

}

public static boolean hasXyz(final String in) {
    if(in.contains(".xyz")) {
        final String s = in.replaceAll("\\.xyz", "");
        return s.contains("xyz");
    }
    return true;
}

输出:

true
false
true
true
于 2013-03-17T14:34:04.283 回答