检查第二个字符串的所有字符是否与第一个字符串中的字符至少匹配一次

时间:2016-11-19 11:27:41

标签: java string

public class CharMatch {
    private void matchString(String s1, String s2) {
        int count = 0;
        int len1 = s1.length();
        int len2 = s2.length();
        for (int i = 0; i < len2; i++) {
           for (int j = 0; j < len1; j++) {
              if (s2.charAt(i) == s1.charAt(j)) {
                  count++;
              }
              if (count == len2) {
                  System.out.print("True");}
              }
          }
     }     

   public static void main(String args[]) throws IOException {
      CharMatch cm = new CharMatch();
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.println("Enter First String");
      String a = br.readLine();
      System.out.println("Enter Second String");
      String b= br.readLine();
      cm.matchString(a,b);
   }
}

我正在编写此代码以输入两个字符串,例如输入:s1="Hello world" s2:"woeh"如果s2中的所有字符在s1中至少匹配一次,则输出应为true。这是我写的代码,但我没有按照需要获得完美的输出。

3 个答案:

答案 0 :(得分:1)

  

这是我写的代码,但我没有按照需要获得完美的输出。

您的代码存在一些问题。

  • 正如@MacRyze所提到的,"woeh"字符中匹配"Hello world"的问题是,如果您希望'h''H'匹配,则需要小写字符串以不区分大小写的方式。
  • 另一个大问题是你会在第一个字符串中计算'o'两次字符,而我认为你不想做。一旦找到第一个字符匹配,您应该在count++;之后休息一下。此外,您应该在与if (count == len2) {相同的块中测试count++,如果是真的话,您应该从方法返回。您也可以在方法结束时执行此操作。

最终,如果您使用调试器并逐步完成示例,您应该能够找到此错误。这是一个很好的tutorial for eclipse

我对代码进行了一些改进并使用了String.indexOf(...)方法并得出了:

private void matchString(String s1, String s2) {
    int matchCount = 0;
    s1 = s1.toLowerCase();
    s2 = s2.toLowerCase();
    // go through all characters in the match string
    for (char ch : s2.toCharArray()) {
        // look for the character in the first string
        if (s1.indexOf(ch) >= 0) {
            matchCount++;
        }
    }
    if (matchCount == s2.length()) {
        System.out.print("True");
    }
}

答案 1 :(得分:0)

我想如果角色案件很重要,这一点非常重要。如果不是,我猜这个小代码应该做的工作:

        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();
        boolean flag = true;
        for(char element : s2.toCharArray()){
           if(!s1.contains(Character.toString(element))){
               flag = false;
           }
        }
        System.out.println(flag);

另一方面,如果字符大小写很重要,请删除s1 = s1.toLowerCase();s2 = s2.toLowerCase();。  祝你的代码好运!

答案 2 :(得分:-1)

使用java字符串contains()方法搜索此字符串中的字符序列。如果在此字符串中找到char值序列,则返回true,否则返回false。

void matchString(String s1,String s2)
{
    if(s2.contains(s1))
       System.out.print("True");
   else
      System.out.print("False");

}