我必须比较两个字符串数组。如果myArray中的任何字符与argArray中的字符匹配,那么我需要交换myArray中字符的大小写。我几乎做到了,但得到了额外的输出。
这是我目前掌握的-
public class Main {
public static void main(String[] args) {
Main ob = new Main();
ob.reverse("bcdxyz@3210.");
}
public String reverse(String arg) {
String reverseCap = "";
String myStr = "abc, XYZ; 123.";
char[] argArray = arg.toCharArray();
char[] myArray = myStr.toCharArray();
for (int i =0; i < myArray.length; i++) {
for (int j =0; j < argArray.length; j++){
if (myArray[i] == argArray[j] && Character.isLowerCase(myArray[i])){
reverseCap += Character.toUpperCase(myArray[i]);
} else if (myArray[i] == argArray[j] && Character.isUpperCase(myArray[i])){
reverseCap += Character.toLowerCase(myArray[i]);
} else {
reverseCap += myArray[i];
}
}
}
System.out.println(reverseCap);
return null;
}
我希望reverseCap为“aBC,xyz,123”,但得到的结果如下-
"aaaaaaaaaaaaBbbbbbbbbbbbcCcccccccccc,,,,,,,,,,,, XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ;;;;;;;;;;;; 111111111111222222222222333333333333............
".
我已经盯着这个看了几个小时了所以我想是时候在我把眼睛挖出来之前寻求帮助了。
2条答案
按热度按时间imzjd6km1#
有了这部分
每次迭代都要向
reverseCap
中添加一个字符,而不管字符是否匹配。在您的特定示例中,您可以忽略这一点,因为
myStr
中的每个字符也会出现在arg
中,但是如果您想向reverseCap
添加字符,即使它们没有出现在arg
中,您也需要一种方法来检查您是否已经向reverseCap
添加了字符。soat7uwm2#
变更
到
然后对于每次出现
将其改为
最后,将
reverseCap
转换为String:当前正在返回
null
。请考虑返回result
,并将System.out.println(...)
移到main()
方法中。更新:我认为一个更好的方法是使用一个包含大小写对及其逆的查找Map来获得替换字符。嵌套的for循环有点粗糙。
但是如果不习惯Java流API,这看起来也有点粗糙。