2017-06-15 6 views
-1

以下で強調表示されている値を、明示的に読み取られる値で置き換えるにはどうすればよいでしょうか?文字列の値を明示的に読み取る値に置き換える必要があります

String msg ="BGM+EFD:20:109:GBP+aa:bb:cc+5+dd'CST++KindOfDeclaration+0'"; 

つまり、サーバーから値を読み取る必要があります。それは正しく読んでいますが、それは前の値を置き換えています。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'"; 
+0

あなたが望むものの[mcve]を提供してください。これは不明です。あなたのロジックはあまり意味がありません。また、そのような仕事のためにRegexをチェックする必要があります。私の出力は、BGM + EFD:20:109:GBP + aa:bb:cc + 56 + dd'CST ++ KindOfDeclaration + 0 'のように表示されます。 – AxelH

+0

提供されたコードは正常に動作しています。あなたは[ここ](https://ideone.com/ZRpj46)の例を見ることができます。 _Since 'StringUtils'はJava SEにはないので、example_では使用されていません。また、IDEでオフラインでチェックすることもできます。問題はあなたのコードの他の部分にあるようです。 – cse

+0

どうして 'msg.replace(" 5 "、" 56 ")' –

答えて

0

として私が手出力を出力を取得していますあなたが投稿する間違ったものではありません)、正規表現を使った他の解決法がここにあります:

ここでは簡単な正規表現ですほぼ同じ変換

msg = msg.replaceAll(
    "(.*\\+)(\\d+)(\\+.*'.*)", 
    "$1" 
      + (StringUtils.isNotEmpty(messageFunction) ? messageFunction : "9") 
      + "$3" 
) 

この正規表現"(.*\\+)(\\d+)(\\+.*'.*)"はちょうど私が特定のグループ内'前に「+ +」との最後の値を取得してみましょう。これは私が推測すると改善することができます。しかし結果は正しい。

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

私は正規表現では、マスターはないですので、それはおそらく、100%安全ではありませんが、これはまだ改善することができます。

関連する問題