Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将两个单词的常用字母大写?_Java - Fatal编程技术网

Java 如何将两个单词的常用字母大写?

Java 如何将两个单词的常用字母大写?,java,Java,问题: 编写一个程序,将两个单词作为输入,并查找它们的任何常用字母。例如,单词“computer”和“program”有共同的字母“o”、“m”、“p”和“r”。程序的输入将是一个字符串,其中包含两个仅由小写字母组成的单词,并用一个空格分隔。输出所有常用字母大写的单词 输入和输出示例: 输入两个单词:计算机程序 计算机程序 我是java新手,我已经尝试了我所知道的一切来解决这个问题,这几乎是徒劳的。你能帮我吗 这就是我到目前为止得到的 public static void main(String

问题: 编写一个程序,将两个单词作为输入,并查找它们的任何常用字母。例如,单词“computer”和“program”有共同的字母“o”、“m”、“p”和“r”。程序的输入将是一个字符串,其中包含两个仅由小写字母组成的单词,并用一个空格分隔。输出所有常用字母大写的单词

输入和输出示例: 输入两个单词:计算机程序 计算机程序

我是java新手,我已经尝试了我所知道的一切来解决这个问题,这几乎是徒劳的。你能帮我吗

这就是我到目前为止得到的

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);

    //User input
    System.out.println("Please input two words. \nExample: computer program");
    String input = scanner.nextLine().toLowerCase();

    //Split the user's input
    String[] inputWords = input.split(" ");
    String firstWord = inputWords[0];
    String secondWord = inputWords[1];

    String commonLettersCaps = capitalizeCommonLetters(firstWord, secondWord);

}

private static String capitalizeCommonLetters(String firstWord, String secondWord) {

}

尚未测试代码,但这里有一个想法:将2个输入转换为字符数组,然后循环遍历第一个数组中的每个字符,查找第二个数组中是否有匹配项,如果有,则将当前的2个索引大写

char[] firstWordArr = firstWord.toCharArray();
char[] secondWordArr = secondWord.toCharArray();
for (int i = 0; i < firstWordArr.length; i++) {
    for (int j = 0; j < secondWordArr.length; j++) {
        if (firstWordArr[i] == secondWordArr[j]) {
            firstWordArr[i] = Character.toUpperCase(firstWordArr[i]);
            secondWordArr[j] = Character.toUpperCase(secondWordArr[j]);
        }
    }
}
return new String(firstWordArr) + " " + new String(secondWordArr);
char[]firstWordArr=firstWord.toCharArray();
char[]secondWordArr=secondWord.toCharArray();
for(int i=0;i

在if条件下,如果要执行不区分大小写的比较,可以将其替换为Character.toUpperCase(firstWordArr[i])==Character.toUpperCase(secondWordArr[j])

这很有效。我试图尽可能减少冗余处理,但我必须相信有一个更为优化的解决方案。代码中的注释非常简单

请注意,将字符与
~040
相加将关闭区分小写和大写的位(从而使其成为大写)


您的运行时是
O(n^2)
。有一个
O(n)
解决方案。是的,它是O(n^2),但OP问题没有提到程序的复杂性。@LoMaPh发布的解决方案很容易阅读。
String s1 = "computer";
String s2 = "program";

// find the characters common to both
// strings.

// processed characters are marked
// to avoid redundant processing

StringBuilder sb1 = new StringBuilder();
boolean[] processed = new boolean[256];
for (int i = 0; i < s1.length(); i++) {
    char c = s1.charAt(i);

    // ignore if this character has been checked
    if (!processed[c]) {
        if (s2.indexOf(c) >= 0) {
            //save common character
            sb1.append(c);
        }
    }
    // mark character as processed
    processed[c] = false;
}
// A string of the common characters
String common = sb1.toString();

char sa[] = s1.toCharArray();
char sb[] = s2.toCharArray();

// Now go thru and change the common
// characters to upper case
for (int i = 0; i < sa.length; i++) {
    if (common.indexOf(sa[i]) >= 0) {
          sa[i] &= ~040;
    }
}
// Ditto
for (int i = 0; i < sb.length; i++) {
    if (common.indexOf(sb[i]) >= 0) {
        sb[i] &= ~040;
    }
}

System.out.println(new String(sa));
System.out.println(new String(sb));

cOMPuteR
PROgRaM