寻找多个句子中的常见字符

时间:2017-03-14 03:42:39

标签: java

我有一些纯文字:

  因此,我们是美利坚合众国的代表   美国,在大会上,聚集,呼吁   世界最高法官对我们意图的正确性,   做,在名义上,由权威人士的权威   这些殖民地,庄严地发表并宣布,这些联合国   殖民地是,而且权利应该是自由和独立的   状态;他们从所有的忠诚中解脱出来   英国皇冠,和他们之间的所有政治联系   和大不列颠国,应该是完全的   溶解;而作为自由和独立国家,他们有   全权征收战争,缔结和平,合同联盟,   建立商业,并做所有其他行为和事情   独立国家可能是对的。并为此提供支持   宣言,坚定地依赖神圣的保护   普罗维登斯,我们相互承诺我们的生活,我们的生活   财富和我们神圣的荣誉。

我必须找到每一行中出现的所有字符("因此,我们是美利坚合众国的代表,在大会上,"是第一行)。一个例子是字母d,因为它出现在每一行上。

有关如何执行此操作的任何提示或答案?

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

输入字符串:

    String string = "a b c d e f g h\n"
            + "zzzzz a b zzzzz\n"
            + "kkkkkkk a b djjjjj\n"
            + "ddaaddfdf b  dfdfdf\n"
            + "asdfsadf b  asdfaqw\n";
    compare(string);

比较法:

public void compare(String string) {
    Pattern pattern = null;
    Matcher matcher = null;
    for (char i = 'a'; i <= 'z'; i++) {
        pattern = Pattern.compile("^.*(" + i + ").*(?:\\n(?=.*\\1.*).*)*$", Pattern.CASE_INSENSITIVE);
        matcher=pattern.matcher(string);
        if (matcher.find()) {
            System.out.println(i);
        }
    }
}

由于a和b在所有行中都是通用的,因此输出将为:

a
b

Regex BreakDown

答案 1 :(得分:0)

首先编写并测试一个方法,该方法可以找到两组字符中的公共字母。

 public String commonLetters(String a, String b) {
     ...
 }

使用assertEquals("bc", commonLetters("abc", "bcd"))等测试对其进行测试。您应该能够通过基本的字符串处理来实现这一目标。不要担心提高效率。如果它通过第一个字符串读取第一个字符串的每个字符,那就这样吧。

一旦你知道这是有效的,你就有了像(伪代码)那样循环的工具:

String line = readLine();
String commonLettersSoFar = line;
while(line != null) {
    commonLettersSoFar = commonLetters(line, commonLettersSoFar);
    line = readLine();
}
return commonLettersSoFar;

一旦这样有效,你可以考虑让它变得更聪明,更有效率。考虑让commonLetters()Set<Character>合作,而不是String  (考虑如何将String转换为Set<Character>)。查看Set的JavaDoc并寻找有用的方法。

答案 2 :(得分:0)

您不需要执行实现,Java已经内置了它。让Sets为您完成工作。

为每一行创建一个HashSet<char>,然后使用set.retainAll(otherSet),然后该集合将只包含每一行的公共元素。 (根据您的要求进行调整)