支持它的 CharSequence 实现上的 indexOf

发布于 2024-11-28 08:01:35 字数 170 浏览 0 评论 0原文

在我的程序中,我使用了大量的字符串和字符串构建器。我想摆脱 StringBuilder toString() 方法并在整个过程中使用 CharSequences。但是,我需要访问 indexOf 方法(该方法在 StringBuilder 和 String 中都可用,但在其他实现中不可用)。我如何实现一个使该函数可见的接口?

In my program I use a lot of Strings and StringBuilders. I would like to get rid of the StringBuilder toString() method and use CharSequences throughout. However I need access to the indexOf method (which is available in both StringBuilder and String but not in other implementations). How might I implement an interface that will make this function visible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

分分钟 2024-12-05 08:01:35

好吧,您可以通过对已知类型进行硬编码测试来相当轻松地完成此操作,否则“手动”执行此操作:

public static int indexOf(CharSequence input, String needle) {
    if (input instanceof String) {
        String text = (String) input;
        return text.indexOf(needle);
    }
    if (input instanceof StringBuilder) {
        StringBuilder text = (StringBuilder) input;
        return text.indexOf(needle);
    }
    // TODO: Do this without calling toString() :)
    return input.toString().indexOf(needle);
}

就硬编码类型而言,这非常难看,但它会起作用。

Well, you could do it reasonably easily by hardcoding tests for known types, and doing it "manually" otherwise:

public static int indexOf(CharSequence input, String needle) {
    if (input instanceof String) {
        String text = (String) input;
        return text.indexOf(needle);
    }
    if (input instanceof StringBuilder) {
        StringBuilder text = (StringBuilder) input;
        return text.indexOf(needle);
    }
    // TODO: Do this without calling toString() :)
    return input.toString().indexOf(needle);
}

This is pretty ugly in terms of hard-coding the types, but it'll work.

撕心裂肺的伤痛 2024-12-05 08:01:35

您可以使用 TextUtils 中的默认方法: indexOf

You can use the default method from TextUtils: indexOf

桃扇骨 2024-12-05 08:01:35

一种想法是为每种类型创建一个具有多个静态实现的类。

public class Strings{

    public static int indexOf(String input, String c){
        return input.indexOf(c);
    }

    public static int indexOf(StringBuilder input, String c){
        return input.indexOf(c);
    }

    public static int indexOf(YourClass input, String c){
        return input.indexOf(c);
    }
}

这样,您只需为每个具有实现的类型调用 Strings.indexOf(whatever) 即可。通过让编译器/jvm 选择为您使用的方法,这将使您的代码保持干净。

One thought is to have a class with multiple static implementations for each type.

public class Strings{

    public static int indexOf(String input, String c){
        return input.indexOf(c);
    }

    public static int indexOf(StringBuilder input, String c){
        return input.indexOf(c);
    }

    public static int indexOf(YourClass input, String c){
        return input.indexOf(c);
    }
}

This way, you can just call Strings.indexOf(whatever) for each type that has an implementation. Which will keep your code clean by letting the compiler/jvm pick which method to use for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文