⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rangequerycreator.java

📁 一个用于搜索本地文件内容的小型搜索引擎
💻 JAVA
字号:
package queries;

public class RangeQueryCreator extends QueryCreator {
	private static RangeQueryCreator uniqueInstance;
	private String[] bounds;
	private RangeQueryCreator(){
		
	}

	@Override
	public Query buildQuery(String token) {
		RangeQuery query = null;
		if(token.startsWith("modtime:")){
			token = ":" + token;
		}
		bounds = token.substring(10, token.length() - 1).split("-");
		Comparable left = bounds[0];
		Comparable right = bounds[1];
		if(token.startsWith("filesize:")){
			left = new Long(bounds[0]);
			right = new Long(bounds[1]);
		}
		if(token.charAt(9) == '{'){
			if(token.charAt(token.length() - 1) == '}'){
				query = createRangeQuery(token);	
				
				query.setState(new LeftOpenRightOpenState(left,right));
			}
			else if(token.charAt(token.length() - 1) == ']'){
				query = createRangeQuery(token);
				query.setState(new LeftOpenRightCloseState(left,right));
			}
		}
		else if(token.charAt(9) == '['){
			if(token.charAt(token.length() - 1) == '}'){
				query = createRangeQuery(token);
				query.setState(new LeftCloseRightOpenState(left,right));
			}
			else if(token.charAt(token.length() - 1) == ']'){
				query = createRangeQuery(token);
				query.setState(new LeftCloseRightCloseState(left,right));
			}
		}					
		return query;
	}
	
	public static RangeQueryCreator getInstance(){
		if(uniqueInstance == null){
			synchronized(RangeQueryCreator.class){
				if(uniqueInstance == null){
					uniqueInstance = new RangeQueryCreator();
				}
			}
		}
		return uniqueInstance;
	}
	
	private RangeQuery createRangeQuery(String token){
		if(token.startsWith("filesize:")){
			return new SizeRangeQuery();
		}
		else if(token.startsWith(":modtime:")){
			addDigits(bounds);
			return new TimeRangeQuery();
		}
		else if(token.startsWith("filename:")){
			return new NameRangeQuery();
		}
		return null;
	}
	
	private void addDigits(String[] bounds){		
		if(bounds.length == 2){
			StringBuffer sb1 = new StringBuffer(bounds[0]);
			StringBuffer sb2 = new StringBuffer(bounds[1]);
			for(int i = bounds[0].length();i < 14;i++){
				sb1.append("0");
			}
			for(int i = bounds[1].length();i < 14;i++){
				sb2.append("0");
			}
			bounds[0] = sb1.toString();
			bounds[1] = sb2.toString();
		}		
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -