Java:搜索两个字符串之间的第一个公共字符

时间:2019-02-20 16:34:28

标签: java string char

我无法解决此问题。我必须创建一个名为cercaCarattere的方法,该方法接受输入的两个字符串,将它们进行比较,如果找到一个字符(第一个,对应的字符),则必须返回它,否则必须返回“ *”。另外,基本上,我必须循环读取两个字符串,直到方法返回的字符和第一个字符串的最后一个字符不同为止。

这是我编写的代码

public class prova {

public static char cercaCarattere(String str1, String str2) {
    boolean isCommon = false;
    char letter;
    for(int i=0; i<str1.length() && i<str2.length(); i++) {
        if(str1.charAt(i) == str2.charAt(i)) {
            isCommon = true;
            letter = str1.charAt(i);
        } else {
            isCommon = false;
            letter = '*';
        }
    }

    return letter;
}

public static void main(String[] args) {
    Scanner stdin = new Scanner(System.in);
    String str1, str2;

    System.out.println("Inserire la stringa");
    str1 = stdin.nextLine();
    System.out.println("Inserire la stringa");
    str2 = stdin.nextLine();

    cercaCarattere(str1, str2);
}

在该方法中,我想编写一个for来读取两个字符串并检查每个字符是否都相同,如果是,则返回它,但是返回结果给我一个错误,因为说“ letter”未初始化。我该怎么解决?

我不能使用哈希集,数组或其他。

4 个答案:

答案 0 :(得分:2)

进行以下两项更改:

在您的cercaCarattere()中,找到第一个匹配项后,您就可以早日返回。方法也可以简化为:

public static char cercaCarattere(String str1, String str2) {
    char letter = '*';
    for (int i = 0; i < str1.length() && i < str2.length(); i++) {
        if (str1.charAt(i) == str2.charAt(i)) {
            return str1.charAt(i);
        } 
    }
    return letter;
}

然后,通过方法使用值 returned 将其打印出来

System.out.println(cercaCarattere(str1, str2));

答案 1 :(得分:0)

Ciao Andrea,该代码无法正常工作,因为:

  • 您必须在letter = str1.charAt(i);之后返回
  • 您可以删除isCommon,因为您不使用它

代码变成了:

public static char cercaCarattere(String firstString, String secondString) {
    char letter = '*';
    for (int i = 0; i < firstString.length() && i < secondString.length(); i++) {
        if (firstString.charAt(i) == secondString.charAt(i)) {
            return firstString.charAt(i);
        } 
    }
    return letter;
}

答案 2 :(得分:0)

Java 8流解决方案:

  • 在相应位置找到匹配的char
    public static char cercaCarattere(String str1, String str2) {
        return IntStream.range(0, Math.min(str1.length(), str2.length()))
            .filter(i -> str1.charAt(i) == str2.charAt(i))
            .mapToObj(str1::charAt)
            .findFirst()
            .orElse('*');
    }
  • 在任何位置查找第一个匹配的char
    public static char cercaCarattere(String str1, String str2) {
        return str1.chars().mapToObj(c1 -> (char) c1)
            .filter(c1 -> str2.chars().mapToObj(c2 -> (char) c2).anyMatch(c2 -> c1 == c2))
            .findFirst()
            .orElse('*');
    }

答案 3 :(得分:-1)

以这种方式,即使编译器没有抱怨变量,编写代码也不会执行任务。编译器吐出该错误的原因是,如果两个字符串的长度均为零,则letter实际上保持未初始化状态。第二个问题是,一旦找到匹配项,您应该中断循环,但是代码没有。正确的方法是这样:

char letter = '*';
for(int i=0; i<str1.length() && i<str2.length(); i++) {
    if(str1.charAt(i) == str2.charAt(i)) {
        letter = str1.charAt(i);
        break;
    } 
}

return letter;