java - 修改字符串时的意外行为

标签 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)+"]";
}

由于某种原因,一对括号没有正确放置,我不知道如何修复。

最佳答案

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

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

解释:

A(\d+]) 匹配 A 后跟一系列数字,然后是 ]。它将一系列数字和 ] 捕获到第 1 组中。replaceAll 替换该字符串中与第二个参数 A[$1。此处,$1 表示第 1 组。因此它替换为 A[,后跟第 1 组中捕获的内容。

关于java - 修改字符串时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48238721/

相关文章:

java - 使用正则表达式提取 XML 中的属性值

java - @Async 在 Groovy 中不是异步的

Java字符串比较

regex - 如何使用正则表达式匹配亚洲字符?

javascript - `gulp-replace` 仅替换部分目标,但不是全部

java - try-multicatch 与 ExceptionInInitializerError 和 ArithmeticException 混淆

java - 如何在jsp中打印列表列表和其他类型的数据

c - 字符串函数返回段错误

ubuntu - 如何用一个字符替换多个字符?

Javascript正则表达式分组替换