查找两个字符串之间的匹配字符

时间:2019-10-28 22:47:32

标签: java string char

public class findMatching {
   public static void main(String[] args) {
      String matchOne = "caTch";
      String matchTwo = "cat";
      findMatching(matchOne, matchTwo);
   }

   public static void findMatching(String matchOne, String matchTwo) {
      int lengthOne = matchOne.length();
      int lengthTwo = matchTwo.length();
      char charOne;
      char charTwo;

      while(!matchOne.equals(matchTwo)) {
         for(int i = 0; i < lengthOne && i < lengthTwo; i++) {
            charOne = matchOne.charAt(i);
            charTwo = matchTwo.charAt(i);
            if(charOne == charTwo && lengthOne >= lengthTwo) {
               System.out.print(charOne);
            } else if (charOne == charTwo && lengthTwo >= lengthOne){
               System.out.print(charTwo);
            } else {
               System.out.print(".");
            }
         }
      }
   }
}

我创建了一个名为 findMatching 的静态方法,该方法接受两个String参数,然后将它们比较以匹配字符。如果检测到匹配的字符,它将打印所述字符,而不匹配的字符将用“。”表示。代替。

  

EX:对于caTchcat,预期输出应为ca...,其中不匹配的字符用“。”表示。在较长的字符串中。

但是,现在,我的程序的输出仅打印出ca.,因为它仅打印较短字符串的不匹配字符。我相信问题的根源可能在于我的 lengthOne lengthTwo 的if语句的逻辑。

2 个答案:

答案 0 :(得分:0)

第一个for循环可打印所有常见和不常见(“。”)字符,第二个for循环可打印不常见字符(“。”)直到使用大和小字符串之间的差异绝对(abs)函数

代码:

          for(int i = 0; i < lengthTwo && i < lengthOne; i++){
            if(matchOne.charAt(i) == matchTwo.charAt(i)){
             System.out.print(matchOne.charAt(i));
            }
            else{
             System.out.print(".");
            }
          }
          for(int j = 0; j < java.lang.Math.abs(lengthOne - lengthTwo);j++){
           System.out.print(".");
          }

答案 1 :(得分:0)

当您遇到i < lengthOne && i < lengthTwo时,只要遇到较短字符串的长度,您的for循环将终止。因此,您需要继续循环,直到到达较长的字符串的末尾为止,但是当较短的字符串中的字符不足时,请停止比较。

这样的事情就能完成

public static void findMatching(String matchOne, String matchTwo) {
  int lengthOne = matchOne.length();
  int lengthTwo = matchTwo.length();
  char charOne;
  char charTwo;

  for(int i = 0; i < lengthOne || i < lengthTwo; i++) {
    if(i < lengthOne && i < lengthTwo) {
        charOne = matchOne.charAt(i);
        charTwo = matchTwo.charAt(i);
        if (charOne == charTwo) {
           System.out.print(charTwo);
        } else {
           System.out.print(".");
        }
    } else {
       System.out.print(".");
    }

  }
}

我不确定while循环的意义是什么会使程序永远运行,但是也许您希望将其作为if?