假设我有这样的输入
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/