繁体   English   中英

根据定界符和字符串进行分割

[英]Splitting based on delimiter and string

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

CompanyData是我的字符串,我正在分割数据,如下所示。 这段代码没有问题,但是如果更改顺序,则字符串拆分会中断。 如何拆分此字符串并通过其名称分配给另一个字符串(如基于ChargeCompany1Cnt,ChargeCompany2Cnt的拆分)。 我在UNIX中使用过cutsed命令来执行此操作,现在将我的Shell脚本转换为JAVA。 非常抱歉,这是一个基本问题

String ChargeCompany1Cnt=CompanyData.split(,)[0].replace("{","");
String ChargeCompany2Cnt=CompanyData.split(,)[1];
String ChargeCompany3Cnt=CompanyData.split(,)[2];
String BalanceCompany3Cnt=CompanyData.split(,)[3];
String ChargeCompany1Flag=CompanyData.split(,)[8];

基本上我需要在CompanyData中找到诸如ChargeCompany2Cnt,ChargeCompany1Flag之类的字符串并打印ChargeCompany2Cnt:73 ChargeCompany1Flag:green

请注意,如果这是JSON对象,则可以使用Jacson的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 );

您的问题不太清楚,但是也许此代码段会为您指明正确的方向:

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

顺便说一句,您也可以不使用cut(1)来执行整个操作。

根据您打算如何使用变量,您可以替代地创建一组键值对,而不是显式声明每个变量。 然后,您可以拆分名称(即,在:上拆分每个元素)并将其用作键,而无需知道哪个是哪个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM