Java 将字符串解析为键值对象

Java 将字符串解析为键值对象,java,arrays,string,Java,Arrays,String,我有以下字符串列表 [customer=dan, Date=Wed Sep 16 06:42:18 1938,company=abbc] [customer=ben, Date=Sun May 19 13:12:51 1956,company=tss] 我想从中建立一个列表。 比如说 <customer,dan> <Date,Wed Sep 16 06:42:18 1938> <company,abbc> 如何解析此字符串?您可以使用spli

我有以下字符串列表

[customer=dan, Date=Wed Sep 16 06:42:18  1938,company=abbc] 
[customer=ben, Date=Sun May 19 13:12:51  1956,company=tss] 
我想从中建立一个列表。 比如说

<customer,dan>
<Date,Wed Sep 16 06:42:18  1938>
<company,abbc>


如何解析此字符串?

您可以使用
split
方法解析输入字符串(假设公司和客户名称不包含任何逗号或
]
字符。类似的方法应该可以:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

class Element {

    String customer;
    Date date;
    String company;
    static SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");

    void setDate(String date) {
        try {
            this.date = sdf.parse(date);
        } catch (ParseException ex) {
            // Do something if parsing fails
        }
    }

    @Override
    public String toString() {
        return "<customer," + customer + ">\n"
                + "<Date," + sdf.format(date) + ">\n"
                + "<company," + company + ">";
    }
}

public class ParseList {

    public static void main(String args[]) {
        List<String> list = new ArrayList<>();

        list.add("[customer=dan, Date=Wed Sep 16 06:42:18  1938,company=abbc]");
        list.add("[customer=ben, Date=Sun May 19 13:12:51  1956,company=tss]");

        List<Element> elementList = new ArrayList<>();
        for (String str : list) {
            String[] arr = str.split("[,\\]]"); // Split the string
            Element element = new Element();
            element.customer = arr[0].split("=")[1]; // Split again on the equals
            element.setDate(arr[1].split("=")[1]);
            element.company = arr[2].split("=")[1];
            elementList.add(element);
        }

        for (Element element : elementList) {
            System.out.println(element);
        }

    }
}
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
类元素{
串客户;
日期;
弦乐公司;
静态SimpleDataFormat sdf=新SimpleDataFormat(“EEE MMM dd HH:mm:ss yyyy”);
无效设置日期(字符串日期){
试一试{
this.date=sdf.parse(日期);
}捕获(解析异常){
//如果解析失败,请执行某些操作
}
}
@凌驾
公共字符串toString(){
返回“\n”
+“\n”
+ "";
}
}
公共类解析列表{
公共静态void main(字符串参数[]){
列表=新的ArrayList();
添加(“[customer=dan,Date=Wed-Sep 16 06:42:18 1938,company=abbc]”);
添加(“[customer=ben,Date=Sun May 19 13:12:51 1956,company=tss]”);
List elementList=新建ArrayList();
for(字符串str:list){
字符串[]arr=str.split(“[,\\]]”;//拆分字符串
元素=新元素();
element.customer=arr[0]。拆分(“=”[1];//在等号上再次拆分
element.setDate(arr[1].split(“=”[1]);
element.company=arr[2]。拆分(“=”[1];
元素列表。添加(元素);
}
for(元素:元素列表){
系统输出打印项次(元素);
}
}
}

您至少尝试过什么吗?不要使用列表列表。创建具有属性和方法的对象。@jbnite好的,请您提供示例。感谢您不要使用
列表谢谢!当我尝试您的代码时,我在System.out.println(元素)中转储了它;我认为它与date@BenHendo你说你是什么意思“得到转储”?也许是通过调试器运行它,您将看到问题所在。。。