计算和输出两个字符串之间的字符

时间:2013-10-22 22:39:53

标签: java string

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

例如,“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);
  }

    }

2 个答案:

答案 0 :(得分: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应该在循环结束时具有公共字符的数量。

这是徒手写的,所以要注意语法和次要的逻辑错误。或者我误解了你的任务。它应该非常接近。

答案 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++;
  }
}

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