我正在尝试搜索并显示字符串中的未知字符。两个字符串的长度均为12。
示例:
String s1 = "1x11222xx333";
String s2 = "111122223333"
程序应检查x | X表示的s1中的所有未知数,并在s2中获取相关的字符,并用相关的字符替换x | X.
到目前为止,我的代码仅使用s2中的相关char替换了第一个x | X,但是使用第一个x | X的char打印了其余未知数的重复项。
这是我的代码:
String VoucherNumber = "1111x22xx333";
String VoucherRecord = "111122223333";
String testVoucher = null;
char x = 'x'|'X';
System.out.println(VoucherNumber); // including unknowns
//find x|X in the string VoucherNumber
for(int i = 0; i < VoucherNumber.length(); i++){
if (VoucherNumber.charAt(i) == x){
testVoucher = VoucherNumber.replace(VoucherNumber.charAt(i), VoucherRecord.charAt(i));
}
}
System.out.println(testVoucher); //after replacing unknowns
}
}
答案 0 :(得分:1)
我一直都喜欢使用StringBuilder
s,所以这是使用它的解决方案:
private static String replaceUnknownChars(String strWithUnknownChars, String fullStr) {
StringBuilder sb = new StringBuilder(strWithUnknownChars);
while ((int index = Math.max(sb.toString().indexOf('x'), sb.toString().indexOf('X'))) != -1) {
sb.setCharAt(index, fullStr.charAt(index));
}
return sb.toString();
}
这很简单。您创建一个新的字符串生成器。虽然仍可在字符串构建器(x
)中找到X
或indexOf('X') != -1
,但请获取索引并setCharAt
。
答案 1 :(得分:0)
你正在以错误的方式使用String.replace(char, char)
,文档说
返回一个新字符串,该字符串是使用newChar替换此字符串中所有出现的oldChar。
因此,如果您有多个字符,则会替换每个具有相同值的字符。
你需要“更改”特定位置的字符,为此,最简单的方法是使用String.toCharArray
可以获得的char数组,从这里,你可以使用相同的逻辑
当然,您可以使用String.indexOf
查找特定字符的索引
注意:char c = 'x'|'X'
;不会给你预期的结果。这将执行二进制操作,给出的值不是您想要的值。
如果其中一个位为1,OR将返回1.
0111 1000 (x)
0101 1000 (X)
OR
0111 1000 (x)
但结果将是一个整数(每个数字运算至少返回一个整数,你可以找到更多关于它的信息)
这里有两个解决方案,您可以使用两个变量(或数组),或者如果可以,则使用String.toLowerCase
仅使用char c = 'x'