Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recurring Delimiter in java with broken message to an array

I have a String:

String received = "28,gZrate:-1.48},
{gXrate:9.10,gYrate:-0.69,gZrate:-1.50},        
{gXrate:9.22,gYrate:0.54,gZrate:-1.67},     
{gXrate:9.20,gYrate:-2.40,gZrate:-1.65},{gXrate:9.02" ; 

I need this string to be in an array like this:

["gXrate:9.10,gYrate:-0.69,gZrate:-1.50","gXrate:9.22,gYrate:0.54,gZrate:-1.67","gXrate:9.20,gYrate:-2.40,gZrate:-1.65"]

neglecting the broken part of received string at the beginning and end i.e.

28,gZrate:-1.48}

{gXrate:9.02 ; 

also to note at times string may not be broken.

like image 866
vbnr Avatar asked Sep 09 '26 05:09

vbnr


1 Answers

String received = "28,gZrate:-1.48},{gXrate:9.10,gYrate:-0.69,gZrate:-1.50},";
       received += "{gXrate:9.22,gYrate:0.54,gZrate:-1.67},";
       received += "{gXrate:9.20,gYrate:-2.40,gZrate:-1.65},{gXrate:9.02";
String pattern = "\\{(.*?)\\},?";
StringBuilder sb = new StringBuilder("[");
boolean first = true;

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(received);
while (m.find()) {
    if (!first) {
        sb.append(",");
    }
    first = false;
    sb.append("\"" + m.group(1) + "\"");
}
sb.append("]");
System.out.println(sb);

Output:

["gXrate:9.10,gYrate:-0.69,gZrate:-1.50","gXrate:9.22,gYrate:0.54,gZrate:-1.67","gXrate:9.20,gYrate:-2.40,gZrate:-1.65"]

Here is a demo which shows that the above code works for both the broken and balanced cases:

Rextester

like image 70
Tim Biegeleisen Avatar answered Sep 10 '26 17:09

Tim Biegeleisen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!