我有一些纯文字:
因此,我们是美利坚合众国的代表 美国,在大会上,聚集,呼吁 世界最高法官对我们意图的正确性, 做,在名义上,由权威人士的权威 这些殖民地,庄严地发表并宣布,这些联合国 殖民地是,而且权利应该是自由和独立的 状态;他们从所有的忠诚中解脱出来 英国皇冠,和他们之间的所有政治联系 和大不列颠国,应该是完全的 溶解;而作为自由和独立国家,他们有 全权征收战争,缔结和平,合同联盟, 建立商业,并做所有其他行为和事情 独立国家可能是对的。并为此提供支持 宣言,坚定地依赖神圣的保护 普罗维登斯,我们相互承诺我们的生活,我们的生活 财富和我们神圣的荣誉。
我必须找到每一行中出现的所有字符("因此,我们是美利坚合众国的代表,在大会上,"是第一行)。一个例子是字母d,因为它出现在每一行上。
有关如何执行此操作的任何提示或答案?
答案 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
答案 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)
,然后该集合将只包含每一行的公共元素。 (根据您的要求进行调整)