2017-04-14 4 views
3

Ich habe einen String:Recurring Delimiter in Java mit aufgebrochenen Nachricht an ein Array

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 diese Zeichenfolge benötigen, wie dies in einem Array zu sein:

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

den gebrochenen Teil der empfangenen vernachlässigen String am Anfang und Ende dh

28,gZrate:-1.48} 

{gXrate:9.02 ; 

auch zu beachten, manchmal Zeichenfolge nicht b kann e gebrochen.

Antwort

1

Sie können einen regulären Ausdruck verwenden:

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

Ausgang:

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

Probieren Sie es here!

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

Ausgang:

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

Hier ist eine Demo, die zeigt, dass der obige Code funktioniert sowohl für die zerbrochenen und ausgewogenen Fällen:

Rextester

0
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(); 
} 

auch, können Sie wie unten schreiben:

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

Ausgabe

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