Java 需要将字符串中的值替换为';他读得很明白

Java 需要将字符串中的值替换为';他读得很明白,java,string,Java,String,我们如何将下面突出显示的值替换为要显式读取的值 String msg ="BGM+EFD:20:109:GBP+aa:bb:cc+5+dd'CST++KindOfDeclaration+0'"; i、 我需要从服务器读取一个值。它正在正确读取,但也正在替换以前的值109 例如,如果它读取的值是56,它将109替换为1056,我不需要它。我给出的代码如下 String msg ="BGM+EFD:20:109:GBP+aa:bb:cc+5+dd'CST++KindOfDeclaration+0'

我们如何将下面突出显示的值替换为要显式读取的值

String msg ="BGM+EFD:20:109:GBP+aa:bb:cc+5+dd'CST++KindOfDeclaration+0'";
i、 我需要从服务器读取一个值。它正在正确读取,但也正在替换以前的值109

例如,如果它读取的值是56,它将109替换为1056,我不需要它。我给出的代码如下

String msg ="BGM+EFD:20:109:GBP+aa:bb:cc+5+dd'CST++KindOfDeclaration+0'";
String bgm=msg.split("\\'") [0];

String tempMessage=bgm;

String messageFunction="56";

System.out.println(bgm);

if(StringUtils.isNotEmpty(messageFunction)){

    bgm=bgm.replace(bgm.split("\\+")[3],messageFunction);
}
else{
    bgm=bgm.replace(bgm.split("\\+")[3],"9");
}
msg=msg.replace(tempMessage, bgm);      
所需输出为

BGM+EFD:20:109:GBP+aa:bb:cc+56+dd'CST++KindOfDeclaration+0'";
但我得到的结果是

BGM+EFD:20:1056:GBP+aa:bb:cc+56+dd'CST++KindOfDeclaration+0'";

由于您的实际代码正在工作(我得到的输出不是您发布的错误输出),下面是使用regex的另一个解决方案:

下面是一个简单的正则表达式,可以进行几乎相同的转换

msg = msg.replaceAll(
     "(.*\\+)(\\d+)(\\+.*'.*)", 
     "$1"
          + (StringUtils.isNotEmpty(messageFunction) ? messageFunction : "9" ) 
          + "$3"
)
这个正则表达式
“(.\\+)(\\d+)(\\+.....*)”
让我获取特定组中
前面“++”之间的最后一个值。我想这是可以改进的。但结果是正确的

group 1 : (.*\\+)
group 2 : (\\d+) the value you seek
group 3 : (\\+.*'.*)

我不是正则表达式大师,所以它可能不是100%安全的,但这仍然可以改进。

请提供您想要的详细信息。这还不清楚。你的逻辑没有多大意义。此外,您还应该检查Regex以获得此类工作。并不是说我的输出看起来像:
BGM+EFD:20:109:GBP+aa:bb:cc+56+dd'CST++KindOfDeclaration+0'
那么您尝试了什么?提供的代码工作正常。你可以看到一个例子。因为
StringUtils
不在JavaSE中,所以示例中不使用它。您还可以在IDE中脱机检查它。问题似乎出现在代码的任何其他部分。为什么不
msg。替换(“5”、“56”)