Validation 解析和验证定长消息的最佳方法

Validation 解析和验证定长消息的最佳方法,validation,parsing,Validation,Parsing,嗨,我有一个固定长度的消息要被解析和验证,然后通过一个映射发送它。我想对这种方法有一个看法,并且需要知道是否还有其他更好的方法 代码是伪代码 String input = "12345AmilaJayat21122012"; int split = {5,10,8}; int dataType = {1,2,3};//1=number,2=string,3=date DDMMYYYY public void parseValidate(){ loop split.size{ Str

嗨,我有一个固定长度的消息要被解析和验证,然后通过一个映射发送它。我想对这种方法有一个看法,并且需要知道是否还有其他更好的方法

代码是伪代码

String input = "12345AmilaJayat21122012";
int split = {5,10,8};
int dataType = {1,2,3};//1=number,2=string,3=date DDMMYYYY

public void parseValidate(){
  loop split.size{
    String data = input.subString(0,split[i]);
    boolean validated = validateData(data,dataType[i]);//This method would vaidate data accordingly
    if(validated){
      input = input.subString(split[i]);
      //add to map
    }else{
      //Error message
      break;
    }

  }
}
这是我的基本想法,这个想法的改进是什么?如果有其他方法来解析和验证定长消息,它们会是什么


另外,我检查了Apache Camel:Bindy,显然它不适合我的需要。

如果消息有固定大小的子字段(或者至少清楚地取消标记),则可能最清楚(最易于维护)的方法是将其拆分为单独的子字段,并通过任何适当的方法验证每个子字段


如果你处理大量的这样的消息,那么速度是一个问题,并且约束相对简单(例如,这个字段包含类似MM/YY/DD之类的东西),你可以考虑使用一个Listar并表达你的约束作为一系列长的正则表达式。如果令牌的regexp匹配,大多数lexer将允许您添加要执行的代码;如果您有一个字段验证谓词不能仅用形状表示(例如,regexp),则可以将谓词的“其余部分”附加到此操作,因此只有在字段具有正确语法时才会调用它。

如果消息具有固定大小(或至少明确取消标记)的子字段,则它可能是最清晰(最可维护的)将其拆分为各个子字段,并通过任何适当的方法验证每个子字段


如果你处理大量的这样的消息,那么速度是一个问题,并且约束相对简单(例如,这个字段包含类似MM/YY/DD之类的东西),你可以考虑使用一个Listar并表达你的约束作为一系列长的正则表达式。如果令牌的regexp匹配,大多数lexer将允许您添加要执行的代码;如果您的字段验证谓词不能仅用形状表示(例如,regexp),则可以将谓词的“rest”附加到此操作,因此只有在字段具有正确语法的情况下才会调用它。

Yes消息具有固定大小,并且一次只会有一条消息。考虑通过regex验证字段。Yes消息具有固定大小,并且一次只有一条消息。考虑通过正则表达式验证字段。我认为您遗漏了一行“例如,代码是伪代码”:D。。。我知道这并不完全是一个伪代码,但我会用Java编写它,这就是为什么它有许多Java语法。我直接在这里输入了所有代码。如果你需要的话,我可以用真正的Java代码来编辑它。我想你错过了一行“例如,代码是伪的”:D。。。我知道这并不完全是一个伪代码,但我会用Java编写它,这就是为什么它有许多Java语法。我直接在这里输入了所有代码。如果你需要,我可以用真正的Java代码编辑这个。