PropertyTokenizer
问题:怎么解析表达式:orders[0].items[0].name
public class PropertyTokenizer implements Iterable<PropertyTokenizer>, Iterator<PropertyTokenizer> {
private String name;//当前表达式的名称
private String indexedName; //当前表达式的索引序名称
private String index;//索引下标
private String children;//子表达式
//向构造函数中传入要解析的字符串表达式,例如“orders[0].items[0].name”
public PropertyTokenizer(String fullname) {
int tempIndex= fullname.indexOf('.'); //第一个点“.”的索引下标
if (tempIndex> -1) {
name = fullname.substring(0, tempIndex);//初始化name
```
//(***存在的问题:name指代不清楚***),本处指:orders[0]
```
children = fullname.substring(tempIndex+ 1);//初始化children
} else {
name = fullname;
children = null;
}
indexedName = name; //初始化 indexName
tempIndex= name.indexOf('[');
if (delim > -1) {
index = name.substring(delim + 1, name.length() - 1);//初始化index
name = name.substring(0, delim);
}
}
//====上诉四个字段的get and set 方法省略====//
//会创建新的PropertyTokenizer对象并解析children字段子表达式
public PropertyTokenizer next() {
return new PropertyTokenizer(children);
}
}
//我对代码的改进:代码中有些字段不清楚,也不好理解
/**
* Created by xule on 2018/5/6.
*/
//orders[0].items[0].name
public class MyPropertyTokenizer {
private String nameAndIndex; // orders[0]
private String name; //orders
private String index; //0
private String children; //items[0].name
public MyPropertyTokenizer(String fullname){
int tempIndex=fullname.indexOf(".");
if(tempIndex>-1){
nameAndIndex=fullname.substring(0,tempIndex);
children=fullname.substring(tempIndex+1);
}else{
nameAndIndex=fullname;
children=null;
}
tempIndex=nameAndIndex.indexOf("[");
if(tempIndex>-1){
name=nameAndIndex.substring(0,tempIndex);
index=nameAndIndex.substring(tempIndex+1,nameAndIndex.length()-1);
}else{
name=nameAndIndex;
index=null;
}
}
public static void main(String[] agrs){
MyPropertyTokenizer myPropertyTokenizer = new MyPropertyTokenizer("orders[0].items[0].name");
System.out.println("nameAndIndex:"+myPropertyTokenizer.nameAndIndex);
System.out.println("name:"+myPropertyTokenizer.name);
System.out.println("index:"+myPropertyTokenizer.index);
System.out.println("children:"+myPropertyTokenizer.children);
}
}
输出结果:
nameAndIndex:orders[0]
name:orders
index:0
children:items[0].name
代码优化:在语义上更容易理解