📄 operator_filename.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 + -