在采访中,这是一个被问到的问题:
您必须编写一个采用目录名称的程序(例如D:\ XYZ) 和正则表达式(例如“ Olivea ”)作为参数。它会 列出给定目录中名称匹配的所有文件 用正则表达式。
我做了一个简单的程序:
package temp;
import java.io.File;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileSearch1 {
static ArrayList l = new ArrayList();
public static void main(String[] args) {
String folderName = "D:\\"; // the folder path in which you want to
// search
String strPattern = "Olivea"; // Pattern what you want to search
final boolean searchinFile = true; // if you want to search in file keep
// it true for folder search keep it
// false
File f = new File("D:\\");
Pattern pattern1 = Pattern.compile(strPattern);
sunny(f, pattern1, searchinFile);
}
public static void sunny(File f, Pattern pattern1,
final boolean searchinFileOnly) {
File[] f1 = f.listFiles();
if (f1 == null)
return;
int k = f1.length;
// System.out.println(k);
int i = 0;
while (i < k) {
File f2 = f1[i];
if (f2.isDirectory() && !searchinFileOnly) {
Matcher match1 = pattern1.matcher(f2.getName());
while (match1.find()) {
l.add("");
System.out.println(f2.getName());
}
} else if (f2.isFile() && searchinFileOnly) {
Matcher match1 = pattern1.matcher(f2.getName());
while (match1.find()) {
l.add("");
System.out.println(f2.getName());
}
}
sunny(f2, pattern1, searchinFileOnly);
i++;
}
}
}
经过笔试,面试官问我哪个设计
你可以在这个中使用模式吗?你能不能给我推荐各种各样的东西
我们可以在这段代码中实现的设计模式。?
请帮我解决如何应用复合和迭代器模式?帮助将非常感谢
答案 0 :(得分:4)
忽略了您错过了编码的No.1黄金法则,即一切都应该正确命名的事实,您可以使用Iterator和Composite模式。
Composite允许对文件和目录进行类似处理。
Iterator用于遍历容器并访问容器的元素。迭代器模式将算法与容器分离。
答案 1 :(得分:2)
您可以在使用通用方法创建接口的地方使用strategy pattern。
您将提供一个实现该接口的类。这样您就可以分离实现细节。根据输入数据,您可以使用不同的算法编写更多类。在运行时,您可以选择所需的任何类实现。这只是另一种选择。我建议你学习GOF模式。