我需要编写一个程序,该程序应该询问用户的两个字符串并显示其中的常用字符。
它必须没有重复:即使在两个字符串中多次找到“a”,它也只能显示一次。
我的Java知识非常有限,所以我不是在寻找效率,而是在寻求可理解性。
这是我现在提出的。
//Get String 1
System.out.print( "Enter a string: " );
string1 = sc.next();
//Get String 2
System.out.print( "Enter another string: " );
string2 = sc.next();
System.out.print ( "Common characters: " );
//Common chars
for ( a = 0 ; a < string1.length() ; a++){
for ( b = 0 ; b < string2.length() ; b++){
if ( string1.charAt(a) == string2.charAt(b) ){
System.out.print(string1.charAt(a));
}
任何人都可以帮助我吗?
答案 0 :(得分:3)
您可以使用输入字符串的chars()
流,例如:
public class StringCharCount {
public static void main(final String[] args) {
final String s1 = args[0];
final String s2 = args[1];
s1.chars()
.distinct()
.mapToObj(ch -> String.valueOf((char) ch))
.filter(s2::contains)
.forEach(System.out::println);
}
}
这适用于Java 8或更高版本。
chars()
从字符串distinct()
确保每个值只出现一次mapToObj(...)
是必需的,因为String#contains()
方法需要String
作为输入。所以我们将流值转换为String
。遗憾的是,Java存在基本类型的问题,因此chars
的流实际上是int
的流。因此,我们必须将每个值转换为char
。forEach(...)
将每个值打印到System.out
答案 1 :(得分:1)
我会使用Set<Character>
。这自然会处理重复的问题,并且有一个简单的retainAll
方法来为您完成繁重的工作。
private Set<Character> characterSet(String s) {
Set<Character> set = new HashSet<>();
// Put each character in the string into the set.
for (int i = 0; i < s.length(); i++) {
set.add(s.charAt(i));
}
return set;
}
public Set<Character> common(String a, String b) {
// Make a set out of each string.
Set<Character> aSet = characterSet(a);
Set<Character> bSet = characterSet(b);
// Work out the common characters using retainAll.
Set<Character> common = new HashSet<>(aSet);
common.retainAll(bSet);
return common;
}
public void test(String[] args) throws Exception {
System.out.println(common("abcdef", "afxyzfffaa"));
}
答案 2 :(得分:0)
您可以使用Set
String str1 = "abcdefg";
String str2 = "abcaaadefg";
StringBuilder result = new StringBuilder();
Set<Character> sets = new HashSet<Character>();
for(char ch : str1.toCharArray()){//init
sets.add(ch);
}
for(char ch : str2.toCharArray()){
if(sets.contains(ch)){//str1 char contains str2 char
result.append(ch);
sets.remove(ch);//avoid duplicates
}
}
System.out.println(result.toString());