java 中的重复分隔符,向数组发送消息已损坏



我有一个字符串:

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" ; 

我需要这个字符串在这样的数组中:

["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"]

忽略开头和结尾接收字符串的断开部分即

28,gZrate:-1.48}
{gXrate:9.02 ; 

还要注意有时字符串可能不会被破坏。

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);

输出:

["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"]

这是一个演示,表明上述代码适用于损坏和平衡的情况:

Rextester

您可以使用正则表达式:

import java.util.regex.*;
import java.util.Arrays;
import java.util.ArrayList;
public class Main {
  public static void main (String[] args) {
    ArrayList<String> nonBrokenStrings = new ArrayList<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";
    Matcher m = Pattern.compile("\{([^}]+)\}").matcher(received);
    while(m.find()) {
      nonBrokenStrings.add(m.group(1));
    }
    String[] nonBrokenStringsArr = nonBrokenStrings.toArray(new String[nonBrokenStrings.size()]);
    System.out.print(Arrays.toString(nonBrokenStringsArr));
  }
}

输出:

[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] 

试试这里!

public static String formatToArrayStr(String input){
    String regex="\{([^}]+)\}";
    Matcher m=Pattern.compile(regex).matcher(input);
    StringBuilder result=new StringBuilder().append("[");
    while(m.find()){
        result.append(""").append(m.group(1)).append(""").append(",");
    }       
    result=(result.lastIndexOf(",")>=0?result.deleteCharAt(result.length()-1):result).append("]");
    return result.toString();
}

另外,你可以这样写:

public static String formatToArrayStr(String input){
    Matcher m=Pattern.compile("\{([^}]+)\}").matcher(input);
    List<String> result=new ArrayList<String>();
    while(m.find()){
        result.add("""+m.group(1)+""");
    }       
    return result.toString();
}

输出

["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"]

最新更新