修改字符串时出现意外行为

时间:2018-01-13 09:53:16

标签: java string replace substring

说我有这样的输入
    A5]-A4]-A3]-A2]-A1]-A0] 或者像这样     I=A4]-A5]pABSI)<=((A0]-A1])^2+(A2]-A3])^2)^0.5<=I}

我正在尝试将A<number>]的所有遮挡替换为A[<number>],其中任何介于0和Integer.MAX之间的任何值,因此所需的输出将如下所示 A[5]-A[4]-A[3]-A[2]-A[1]-A[0]
I=A[4]-A[5]pABSI)<=((A[0]-A[1])^2+(A[2]-A[3])^2)^0.5<=I}

但由于某种原因,输出看起来像这样:
A[5]-A[[4]-A[3]-A[2]-A[1]-A0]
I=A[4]-A[5]pABSI)<=((A[0]-A[1])^2+(A[[2]-A3])^2)^0.5<=I}



到目前为止的代码:

private String finalPrg = "";
private int MAIN_LOOP = 0;

private void eval(String s) {

    while (MAIN_LOOP < s.length()) {
// more cases here, irrelevant
        switch (s.charAt(MAIN_LOOP)) {
            evalArrayGetter(finalPrg, MAIN_LOOP);
            break;
        default:
            finalPrg += s.charAt(MAIN_LOOP);
            break;
        }
        MAIN_LOOP++;
    }
}

private void evalArrayGetter(String s, int p) {
    int i;
    for (i = p-1; i > 0; i--) {
        if (s.charAt(i)=='A') {
            break;
        }
    }
    finalPrg =s.substring(0,i+1) + "[" +s.substring(i+1)+"]";
}

由于某种原因,没有正确放置一对支架,我不知道如何修理它。

2 个答案:

答案 0 :(得分:2)

这是一个使用正则表达式的解决方案:

String result = yourString.replaceAll("A(\\d+])", "A[$1");

说明:

A(\d+])匹配A后跟一系列数字,然后匹配]。它捕获一系列数字并将]捕获到组1中。replaceAll将该模式中与第二个参数A[$1匹配的所有内容替换为该模式。在这里,$1表示第1组。因此它替换为A[,后跟第1组中捕获的内容。

答案 1 :(得分:1)

String result = s.replaceAll("A(\\d+)\\]", "A[$1]");