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

📄 operator_filename.java

📁 java实现的全文搜索引擎
💻 JAVA
字号:
/**
 * 
 */
package cn.edu.nju.software.ruse;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author spring
 *
 */
public class Operator_FileName extends Operator {

	/* (non-Javadoc)
	 * @see cn.edu.nju.software.ruse.Operator#getPRI()
	 */
	public Operator_FileName() {
		desription = "FILENAME";
		PRI = PRI_FILENAME;
	}
	
	public int getPRI() {
		return PRI;
	}

	public HashSet<File> getFileSet(String expre, Index index) {
		//System.err.println("@Operator_FileName Starting to getFileSet from the index!");
		
		Pattern p1 = Pattern.compile("(\\.txt)|(\\.doc)");
		Matcher m1 = p1.matcher(expre);
		expre = m1.replaceAll(" ");
		expre = expre.trim();
		
		File[] fileName = index.getFileNameIndex();
		HashMap<String,HashSet<File>> fileNameIndex = new HashMap<String,HashSet<File>>();
		HashSet<File> tempSet;
		String realName;
		for(File item: fileName) {
			realName = item.getName().split("\\.")[0];
			if(!fileNameIndex.containsKey(realName)) {
				tempSet = new HashSet<File>();
				tempSet.add(item);
				fileNameIndex.put(realName, tempSet);
			} else {
				tempSet = fileNameIndex.get(realName);
				tempSet.add(item);
			}
		}
		if(expre.charAt(0) != '[' && expre.charAt(0) != '{') {
			/**
			 * case1:fileName:A
			 * */
			if(fileNameIndex.containsKey(expre)) {
				return fileNameIndex.get(expre);
			} else {
				return new HashSet<File>();
			}
		} else {
			/**
			 * case2: fileName:[] OR fileName:{} OR fileName:[} OR fileName:{]
			 */
			Pattern p = Pattern.compile("\\w+");
			Matcher m = p.matcher(expre);
			ArrayList<String> name = new ArrayList<String>();
			HashSet<File> temp = new HashSet<File>();

			int i = -1;
			while (m.find()) {
				i++;
				name.add(i, m.group());
			}

			/**
			 * case2.1: fileName:[A]
			 */
			if (name.size() == 1) {
				String s = name.get(0);
				if(fileNameIndex.containsKey(s)) {
					return fileNameIndex.get(s);
				} else {
					return new HashSet<File>();
				}
			} else {
				if (expre.charAt(0) == '['
						&& expre.charAt(expre.length() - 1) == ']') {
					Iterator<String> it = fileNameIndex.keySet().iterator();
					while (it.hasNext()) {
						String nameFromIndex = it.next();
						if (nameFromIndex.compareTo(name.get(0)) >= 0
								&& nameFromIndex.compareTo(name.get(1)) <= 0) {
							temp.addAll(fileNameIndex.get(nameFromIndex));
						}
					}
					return temp;
				}
				if (expre.charAt(0) == '{'
						&& expre.charAt(expre.length() - 1) == ']') {
					Iterator<String> it = fileNameIndex.keySet().iterator();
					while (it.hasNext()) {
						String nameFromIndex = it.next();
						if (nameFromIndex.compareTo(name.get(0)) > 0
								&& nameFromIndex.compareTo(name.get(1)) <= 0) {
							temp.addAll(fileNameIndex.get(nameFromIndex));
						}
					}
					return temp;
				}
				if (expre.charAt(0) == '['
						&& expre.charAt(expre.length() - 1) == '}') {
					Iterator<String> it = fileNameIndex.keySet().iterator();
					while (it.hasNext()) {
						String nameFromIndex = it.next();
						if (nameFromIndex.compareTo(name.get(0)) >= 0
								&& nameFromIndex.compareTo(name.get(1)) < 0) {
							temp.addAll(fileNameIndex.get(nameFromIndex));
						}
					}
					return temp;
				} else {
					Iterator<String> it = fileNameIndex.keySet().iterator();
					while (it.hasNext()) {
						String nameFromIndex = it.next();
						if (nameFromIndex.compareTo(name.get(0)) > 0
								&& nameFromIndex.compareTo(name.get(1)) < 0) {
							temp.addAll(fileNameIndex.get(nameFromIndex));
						}
					}
					return temp;
				}
			}
		}
	}

}

⌨️ 快捷键说明

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