只有一个物体通过时计算字符串的长度?

时间:2015-04-27 17:39:12

标签: java

我目前正在使用' Intermediate'预订java但他们没有提供大多数问题的答案(可能应该得到一本新书)。 但在书中他们提出这个问题并说这很容易。

编写一个实现Filter接口的ShortWordFilter类,只接受少于5个字符的单词。即如果字符数小于5,则接受方法将返回true;否则,accept方法返回false。

所以我在eclipse上实现了它,这就是代码:

@Override
public boolean accept(Object x) {
    return false;
}

我的意思是,我完全不知道,而且我没有导师帮助我,所以我希望你们能给我一些指导,因为我尝试过的东西都不起作用。

5 个答案:

答案 0 :(得分:2)

尝试

@Override
public boolean accept(Object x) {
    if (x instanceOf String) and ((String)x).length() < 5)
        return true;
    else
        return false;
}

答案 1 :(得分:2)

作为nullPointer方法的变体(即使我认为它更好):

@Override
public boolean accept(Object x) {
    if (x == null) {
        return false;
    }
    return (x.toString().length() < 5);
}

这个接受任何对象,并将其转换为字符串。作为一种特殊情况,它会为空对象返回false

答案 2 :(得分:1)

  1. 使用Object.toString方法(如果参数可以为null,则为危险)
  2. Cast the Object to a String(如上所述危险,如果不保证String的实例作为参数)
  3. 如果过滤器界面为generic,则可以对其进行参数化
  4. 一旦Object为String,您就可以使用length方法(此处的String for API是您的朋友)。

答案 3 :(得分:1)

您确定x参数的类型必须是Object吗?你能想到代表一系列字符的任何类型吗?

如果您的变量必须是Object类型,那么您需要将其转换为上述类型(提示:String),以便将其视为一系列字符。

如果您想要找到String的长度,那么您已经拥有了length()方法。

然后,您可以使用>>=<<=进行比较。

@Override
public boolean accept(Object x) {
    // cast x to "sequence of characters" type
    // check the length of the sequence of characters and  return appropriate true / false as appropriate
}

答案 4 :(得分:1)

您不希望处理null的对象以及不是字符串的对象,以便您可以

public boolean accept(Object obj) {

    if (null == obj) {
        return false;
    }
    if (! (obj instanceof String)) {
        return false;
    }

    String str = (String)obj;
    return (str.length() < 5);

}