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

  • 本文关键字:单词 常用字 两个 java
  • 更新时间 :
  • 英文 :


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

样本输入和输出:输入两个单词:计算机程序cOMPuteR PROgRaM

我是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个输入转换为char数组,然后循环第一个数组中的每个char,查找第二个数组中是否有匹配项,如果匹配,则将当前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);

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

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

注意,将字符与~040进行"与"运算会关闭区分小写和大写的位(从而使其变为大写(。

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

最新更新