我想比较两个用户定义的字符串,并输出两个字符串之间共享的字符数,而不需要使用数组。然后我需要输出每个字符。我理解使用扫描仪的用户输入部分,但后来我一无所知。
例如,“hamper”为string1,而“发生”为string2将返回:
共享字符数= 5
共享字符>> “h”,“a”,“p”,“p”,“e”,“e”
这是我到目前为止所拥有的。它会在单独的行上打印每个字符。有没有一种方法没有数组将它们全部列在上面一行?:
public class CountMatches {
public static void main(String[] args)
{
//Declare both Strings.
String word1;
String word2;
int count = 0;
//Call for User Input.
Scanner inputDevice = new Scanner(System.in);
System.out.print("Input String 1 >> ");
word1 = inputDevice.next();
System.out.print("Input String 2 >> ");
word2 = inputDevice.next();
inputDevice.close();
//Determine lengths and set label accordingly.
String BigWord;
String SmallWord;
if (word1.length() > word2.length())
{
BigWord = word1;
SmallWord = word2;
}
else
{
BigWord = word2;
SmallWord = word1;
}
//Count and Display the like characters.
for (int i = 0; i < SmallWord.length(); i++)
{
if (BigWord.contains(String.valueOf(SmallWord.charAt(i))))
{
System.out.println("both words contain the letter " + SmallWord.charAt(i));
count++;
}
}
//Display the count of like characters.
System.out.print("Number of like characters >> " + count);
}
}
答案 0 :(得分:1)
假设您有word1
和word2
:
String biggerWord;
String smallerWord;
if (word1.length() > word2.length()) {
biggerWord = word1;
smallerWord = word2;
} else {
biggerWord = word2;
smallerWord = word1;
}
for (int i = 0; i < smallerWord.length(); i++) {
if (biggerWord.contains(String.valueOf(smallerWord.charAt(i)))) {
counter++;
}
}
这表明哪个词更大。然后,对于smallerWord
的长度,一次迭代一个字符,看看biggerWord
是否包含该字符。如果是,请递增计数器。
然后,counter
应该在循环结束时具有公共字符的数量。
这是徒手写的,所以要注意语法和次要的逻辑错误。或者我误解了你的任务。它应该非常接近。
答案 1 :(得分:0)
一种非常好的方法是按字母顺序对字符串进行排序。
sortedWord1 = new String(Arrays.sort(word1.toCharArray()));
sortedWord2 = new String(Arrays.sort(word2.toCharArray()));
这样做是将单词转换为字符数组,按字母顺序排序,然后再将它们变成字符串。
下一步是从头开始迭代并打印出所有常见字符。这将更容易,因为它们已经排序。
int index1 = 0;
int index2 = 0;
while((index1 < sortedWord1.length()) && (index2 < sortedWord2.length()) {
if(sortedWord1.charAt(index1) == sortedWord2.charAt(index2)) {
System.out.print(sortedWord1.charAt(index1) + " ");
index1++; index2++;
}
else if(sortedWord1.charAt(index1)> sortedWord2.charAt(index2)) {
index2++;
}
else {
index1++;
}
}
我没有检查它的语法错误,但它应该是好的。