【问题标题】:simulating a grep in Java (Windows)在 Java (Windows) 中模拟 grep
【发布时间】:2017-01-08 09:20:23
【问题描述】:

我必须寻找一个字符串 "Languages:" 后面有语言。

例如,我可以查找“语言:英语、德语”和 “语言:德语、英语”如果只有 2 种语言。如果有 3 个,我需要寻找 6 种不同的组合。对于 4,将有 24 种组合。对于 5 将有 120 等,这是笨拙的。

我想做类似的事情

grep 语言 | grep 英语 | grep 德语 | grep 意大利语 | grep 丹麦语 | grep 法语 (或者我正在寻找的任何语言)。我认为我们不能在 Windows 上使用 grep。我可以使用正则表达式,但我不知道如何创建一个可以按任何顺序列出语言的表达式。

有什么建议吗?假设我有一个 List 语言,其中包含我想要查找的所有语言。

【问题讨论】:

  • 你在问如何从 Java 中搜索文本文件吗?如果是这样,您是否确定通过搜索网络找不到示例? --- 另外,regex | construct 的哪一部分让您感到困惑?
  • 没有。我有一个字符串中的文本。我想它会是相似的。我知道如何做 macth 和包含甚至替换,但我不明白/知道如何指定几个字符串,其中任何一个都可以按顺序出现。
  • 如果你有一个字符串中的文本,你为什么要运行grep,它是一个独立于Java的命令行程序? --- 至于你的陈述“我可以使用正则表达式,但我不知道如何创建一个可以按任何顺序列出语言的表达式”,我会再问:正则表达式| 构造让您感到困惑?也许您应该了解更多关于正则表达式的信息,而不是要求我们为您编写。
  • 听起来你想比较两个 Sets 的字符串。将您的目标语言列表转换为一个集合,解析输入文本的每一行并将其语言列表放入一个新集合中,并使用equals 进行比较。 (HashSet 是一个足够的 Set 实现。)

标签: java regex windows-7


【解决方案1】:

这里有一个想法可以帮助您入门。希望你能开发它。

    boolean english = false;
    boolean danish = false;
    boolean hopi = false;
    boolean mandarin = false;
    if (inputString.contains("Languages: ")) {
        if (inputString.contains("English")) {
            english = true;
        }
        if (inputString.contains("Danish")) {
            danish = true;
        }
        if (inputString.contains("Hopi")) {
            hopi = true;
        }
        if (inputString.contains("Mandarin")) {
            mandarin = true;
        }
        System.out.println("English? " + english + " Danish? " + danish + " Hopi? " + hopi + " Mandarin? " + mandarin);
    }

如果有超过三种或五种语言,您可能需要对它们进行一些抽象,可能需要一个类或枚举来表示您支持的语言。 EnumSet 可能便于表示字符串中包含哪些语言,而忽略顺序?

顺便说一句,你注意到你不需要正则表达式了吗?

编辑:如果您有List<String> languageList,您可能想要这样做:

    Set<String> languagesInInput = new HashSet<>();
    for (String language : languageList) {
        if (inputString.contains(language)) {
            languagesInInput.add(language);
        }
    }

【讨论】:

  • 谢谢。我正要发表那个评论。如果我可以做一个包含并将所有语言放入一个字符串中进行检查,那就太好了,但它们必须按任何顺序排列,我认为它们不一定是按字母顺序排列的。我可以执行类似 String txt = pageText.replaceAll(".*Languages", "Laungages").replaceAll("\\n.*$","") 之类的操作,这将为我提供语言字符串。然后我可以使用 split 和 a ,并将它们放入一个数组,然后放入一个集合并比较集合
猜你喜欢
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多