1

我想比较两个用户定义的字符串并输出两个字符串之间共享的字符数,而不使用数组。然后我需要输出这些字符中的每一个。我使用扫描仪了解用户输入部分,但之后我一无所知。

例如,“hamper”作为 string1,“happened”作为 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);
  }

    }
4

2 回答 2

1

假设你有word1word2

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然后应该在循环结束时有公共字符的数量。

这是徒手写的,所以要注意语法和轻微的逻辑错误。或者我误解了你的任务。不过应该很接近了。

于 2013-10-22T23:03:06.717 回答
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++;
  }
}

我没有检查它的语法错误,但它应该很好。

于 2013-10-22T22:50:24.447 回答