PropertyTokenizer属性解析器实现,So Easy

PropertyTokenizer是Mybatis中的属性解析器,其主要实现原理如下:

  public PropertyTokenizer(String fullname) {
    //  判断是否以“.”分隔
    int delim = fullname.indexOf('.');
    if (delim > -1) {
      name = fullname.substring(0, delim);
      children = fullname.substring(delim + 1);
    } else {
      name = fullname;
      children = null;
    }
    indexedName = name;
    //  判断是否以“[”分隔
    delim = name.indexOf('[');
    if (delim > -1) {
      index = name.substring(delim + 1, name.length() - 1);
      name = name.substring(0, delim);
    }
  }

测试示例:

    @Test
    public void test(){
        String str = "list[0].user.age";
        PropertyTokenizer tokenizer = new PropertyTokenizer(str);
        while (tokenizer.hasNext()){
            System.out.println("indexedName:"+tokenizer.getIndexedName());
            System.out.println("index:"+tokenizer.getIndex());
            System.out.println("name:"+tokenizer.getName());
            System.out.println("children:"+tokenizer.getChildren());
            System.out.println("---------------------------------------");
            tokenizer = tokenizer.next();
        }
    }

测试结果:
在这里插入图片描述
实现原理:每次解析都会产生一个新的解析对象直至无法解析,通过构造方法充当解析方法以及实现Iterator迭代器接口。
1)定义拆分后的属性字段(其中indexedName = name[ index ])
2)定义解析方法,构造方法实现
3)怎么判断是否解析终结?怎么访问下一层级?实现Iterator迭代器接口
4)对于不需的功能,异常抛出remove()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值