使用相同的char索引替换另一个字符串中的字符串

时间:2017-02-08 06:28:10

标签: java

我正在尝试搜索并显示字符串中的未知字符。两个字符串的长度均为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
        }


    }

2 个答案:

答案 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)中找到XindexOf('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'