基于分隔符和字符串分割

时间:2015-11-12 13:53:21

标签: java split

class myObject {

   list of myObject 'Parents'
   list of myObjectData 'Children'

}

class myObjectData {
    myObject 'Child'
    integer 'someMetaData'
}

CompanyData是我的字符串我正在分割如下数据。这段代码没有问题,但如果在字符串中更改了顺序,则拆分就会中断。 如何拆分此字符串并按名称分配给另一个字符串(如基于ChargeCompany1Cnt,ChargeCompany2Cnt拆分)。我在UNIX中使用String CompanyData = "{ChargeCompany1Cnt:0,ChargeCompany2Cnt:73,ChargeCompany3Cnt:44,BalanceCompany3Cnt:0,ChargeCompany4Flag:green,BalanceCompany2Flag:green,BalanceCompany1Cnt:0,ChargeCompany3Flag:red,ChargeCompany1Flag:green,BalanceCompany4Flag:green,BalanceCompany1Flag:green,BalanceCompany2Cnt:0,BalanceCompany4Cnt:0,BalanceCompany3Flag:green,ChargeCompany2Flag:red,ChargeCompany4Cnt:6}"; cut命令来执行此操作,现在将我的Shell脚本转换为JAVA。很抱歉,如果这是一个基本问题

sed

基本上我需要在CompanyData中找到像ChargeCompany2Cnt,ChargeCompany1Flag这样的字符串并打印ChargeCompany2Cnt:73 ChargeCompany1Flag:green

3 个答案:

答案 0 :(得分:1)

请注意,如果这是JSON对象,您可以使用ObjectMapper轻松解析它 雅克森您可以使用以下代码进行手动解析

    String CompanyData = "{ChargeCompany1Cnt:0,ChargeCompany2Cnt:73,ChargeCompany3Cnt:44,BalanceCompany3Cnt:0,ChargeCompany4Flag:green,BalanceCompany2Flag:green,BalanceCompany1Cnt:0,ChargeCompany3Flag:red,ChargeCompany1Flag:green,BalanceCompany4Flag:green,BalanceCompany1Flag:green,BalanceCompany2Cnt:0,BalanceCompany4Cnt:0,BalanceCompany3Flag:green,ChargeCompany2Flag:red,ChargeCompany4Cnt:6}";
    HashMap<String,String> mymap = new HashMap<String,String>();
    for ( String s: CompanyData.split("[?,{}]")) {
        if (!s.equals(""))
        mymap.put(s.split(":")[0],s.split(":")[1]); }

        for (HashMap.Entry<String, String> entry : mymap.entrySet()) {
    String key = entry.getKey().toString();;
    String value = entry.getValue();
    System.out.println( key + " =  " + value );

答案 1 :(得分:0)

您的问题并不太清楚,但也许这段代码会指出您正确的方向:

List<String> companyCount = new ArrayList<>();
String[] companies = CompanyData.substring(1, -1).split(",");
for (String companyCnt : companies) {
    companyCount.add(companyCnt);
}

顺便说一句,您可以在不使用cut(1)的情况下执行整个操作。

答案 2 :(得分:0)

根据您打算如何使用变量,您可以创建一组键值对,而不是显式声明每个变量。 然后你可以将名称拆分出来(即在#singleton_class上进一步拆分每个元素)并将它们用作键而不需要知道哪个是哪个。