首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅使用cactoos从文件中获取除以#开头的行以外的行

如何仅使用cactoos从文件中获取除以#开头的行以外的行
EN

Stack Overflow用户
提问于 2019-12-14 03:08:07
回答 1查看 60关注 0票数 1

任务是仅使用cactoos库获取文件中除以#开头的行之外的所有行。我得到了以下解决方案:

代码语言:javascript
复制
        Iterable<Text> data =
            new Filtered(
                    (Func<Text, Boolean>) text -> !text.asString().startsWith("#"),
                    new Split(
                            new TextOf(file),
                            new TextOf("\\n")
                    )
            );

在这个解决方案中,我不喜欢过滤函数,在这个函数中,我直接使用startsWith方法。在cactoos中,我没有找到一个检查字符串是否以字符开头的对象。startsWith调用违反了优雅对象的原则,即一切都应该是对象。

我看到的解决方案之一是编写一个对象,如下所示

代码语言:javascript
复制
import org.cactoos.Scalar;
import org.cactoos.Text;
import org.cactoos.text.TextOf;

public final class StartsWith implements Scalar<Boolean> {
    private final Text origin;
    private final Text prefix;

    public StartsWith(String origin, String prefix) {
        this(new TextOf(origin), new TextOf(prefix));
    }

    public StartsWith(Text origin, Text prefix) {
        this.origin = origin;
        this.prefix = prefix;
    }

    @Override
    public Boolean value() throws Exception {
        return origin.asString().startsWith(prefix.asString());
    }
}

只使用cactoos库类就可以做到这一点吗?

您更喜欢哪种解决方案?

EN

回答 1

Stack Overflow用户

发布于 2020-07-13 06:10:57

虽然StartsWithScalar<Boolean>,但它已经存在于cactoos中。

代码语言:javascript
复制
new Filtered<>(
    new Split(
        new TextOf(file),
        new TextOf("[\r\n]+")
    ),
    x -> new Not(new StartsWith(x, new TextOf("#")))
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59328477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档