简体   繁体   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 is my string I am splitting the data like below. CompanyData是我的字符串,我正在分割数据,如下所示。 There is no issue with this code, but if the order is changed in the string splitting is breaking. 这段代码没有问题,但是如果更改顺序,则字符串拆分会中断。 how to split this string and assign to another string by its name(like splitting based on ChargeCompany1Cnt, ChargeCompany2Cnt). 如何拆分此字符串并通过其名称分配给另一个字符串(如基于ChargeCompany1Cnt,ChargeCompany2Cnt的拆分)。 i have used cut and sed commands in UNIX to do this, right now converting my Shell script into JAVA. 我在UNIX中使用过cutsed命令来执行此操作,现在将我的Shell脚本转换为JAVA。 So sorry if it's a basic question 非常抱歉,这是一个基本问题

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

Basically I need to find String like ChargeCompany2Cnt,ChargeCompany1Flag in CompanyData and print ChargeCompany2Cnt:73 ChargeCompany1Flag:green 基本上我需要在CompanyData中找到诸如ChargeCompany2Cnt,ChargeCompany1Flag之类的字符串并打印ChargeCompany2Cnt:73 ChargeCompany1Flag:green

Please note if this is JSON object you can parse it easily with ObjectMapper of Jacson. 请注意,如果这是JSON对象,则可以使用Jacson的ObjectMapper轻松解析它。 you can use the below code for manual parsing 您可以使用以下代码进行手动解析

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

Your question isn't too clear, but perhaps this snippet will point you in the right direction: 您的问题不太清楚,但是也许此代码段会为您指明正确的方向:

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

Incidentally, you can probably perform this whole operation without use of cut(1) as well. 顺便说一句,您也可以不使用cut(1)来执行整个操作。

Depending on how you intend to use the variables you could alternatively create a set of key-value pairs instead of explicitly declaring each variable. 根据您打算如何使用变量,您可以替代地创建一组键值对,而不是显式声明每个变量。 Then you could split the names out (ie split each element further on : ) and use them as keys without needing to know which is which. 然后,您可以拆分名称(即,在:上拆分每个元素)并将其用作键,而无需知道哪个是哪个。

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

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