我正在研究解析分隔文本的解析器。示例
位置1-10:字段a 位置11-20:字段b 位置21-30:字段c 等
我可以使用任何设计模式来实现?我相信我应该使用访客模式
答案 0 :(得分:4)
Visitor
模式?!只需逐行阅读文件并使用substring()
:
String line = //...
String a = line.substring(0, 10);
String b = line.substring(10, 20);
String c = line.substring(20, 30);
我错过了什么吗?你能澄清一下你的问题吗?
答案 1 :(得分:2)
虽然在输入文本的格式始终相同的情况下不需要使用模式,但是格式需要更改时的情况。例如,如果您认为您的应用程序可能将来支持其他文件格式,则Strategy Pattern会派上用场。
class LineData {
public String a;
public String b;
public String c;
}
interface FileParser {
List<LineData> parse(String fileName);
}
class FileParserFixed : FileParser {
public int widthOfA;
public int widthOfB;
public int widthOfC;
public List<LineData> parse(string fileName) {
}
}
class FileParserDelimited : FileParser {
public char delimiter;
public List<LineData> parse(string fileName) {
}
}
使用此方法的应用程序将编程到FileParser的接口,解析分隔和解析固定宽度文件之间的差异将封装在运行时选择的FileParser
的实现中。