Java 以特定格式解析字符串

Java 以特定格式解析字符串,java,regex,string,parsing,Java,Regex,String,Parsing,我有一个如下所示的响应字符串,我需要解析它并将其存储到我的类中。格式如下: 任务名称后跟此虚线------,此虚线也是固定的 然后就在key:valuepair下面。它可以有许多键值对 下面是响应字符串 abc------------- Load:79008 Peak:4932152 def------------- Load:79008 Peak:4932216 ghi------------- Load:79008 Peak:4874588 pqr------------- Loa

我有一个如下所示的响应字符串,我需要解析它并将其存储到我的类中。格式如下:

  • 任务名称后跟此虚线
    ------
    ,此虚线也是固定的
  • 然后就在
    key:value
    pair下面。它可以有许多键值对
下面是响应字符串

abc-------------
Load:79008
Peak:4932152

def-------------
Load:79008
Peak:4932216

ghi-------------
Load:79008
Peak:4874588

pqr-------------
Load:79008
Peak:4874748
下面是我的班级:

public class NameMetrics {

    private String name;
    private Map<String, String> metrics;

    // setters and getters

}
执行此操作的最佳方法是什么?

BufferedReader reader=new BufferedReader(…?);
BufferedReader reader = new BufferedReader(...???...);
NameMetrics current = null;
List<NameMetrics> result = new ArrayList<>();
while (true) {
  String s = reader.readLine();
  if (s == null) {
    break;  // end reached
  }
  if (s.trim().isEmpty()) {
    continue;  // Skip empty line
  }
  int cut = s.indexOf(':');
  if (cut == -1) {
    cut = s.indexOf('-');
    if (cut == -1) {
      continue;
    }
    current = new NameMetrics();
    current.setName(s.substring(0, cut));
    result.add(current);
  } else if (current != null) {
    current.setMetrics(s.substring(0, cut), s.substring(cut+1));
  }
}
NameMetrics current=null; 列表结果=新建ArrayList(); while(true){ 字符串s=reader.readLine(); 如果(s==null){ break;//到达终点 } 如果(s.trim().isEmpty()){ continue;//跳过空行 } int cut=s.indexOf(“:”); 如果(切割==-1){ 切割=s.indexOf('-'); 如果(切割==-1){ 继续; } 当前=新的NameMetrics(); 当前.setName(s.substring(0,cut)); 结果。添加(当前); }else if(当前!=null){ current.setMetrics(s.substring(0,cut),s.substring(cut+1)); } }
BufferedReader reader=新的BufferedReader(…???…);
NameMetrics current=null;
列表结果=新建ArrayList();
while(true){
字符串s=reader.readLine();
如果(s==null){
break;//到达终点
}
如果(s.trim().isEmpty()){
continue;//跳过空行
}
int cut=s.indexOf(“:”);
如果(切割==-1){
切割=s.indexOf('-');
如果(切割==-1){
继续;
}
当前=新的NameMetrics();
当前.setName(s.substring(0,cut));
结果。添加(当前);
}else if(当前!=null){
current.setMetrics(s.substring(0,cut),s.substring(cut+1));
}
}

Regex是不需要的,只需逐行迭代输入即可。跳过空行。如果
line.indexOf(':')
返回-1,则有一个“header”行,否则有一个key:value对,因此
substring()
键和值。冲洗并重复。不需要正则表达式,只需逐行迭代输入即可。跳过空行。如果
line.indexOf(':')
返回-1,则有一个“header”行,否则有一个key:value对,因此
substring()
键和值。冲洗并重复。
BufferedReader reader = new BufferedReader(...???...);
NameMetrics current = null;
List<NameMetrics> result = new ArrayList<>();
while (true) {
  String s = reader.readLine();
  if (s == null) {
    break;  // end reached
  }
  if (s.trim().isEmpty()) {
    continue;  // Skip empty line
  }
  int cut = s.indexOf(':');
  if (cut == -1) {
    cut = s.indexOf('-');
    if (cut == -1) {
      continue;
    }
    current = new NameMetrics();
    current.setName(s.substring(0, cut));
    result.add(current);
  } else if (current != null) {
    current.setMetrics(s.substring(0, cut), s.substring(cut+1));
  }
}