位置分隔文本解析的设计模式?

时间:2012-01-21 12:00:24

标签: java parsing

我正在研究解析分隔文本的解析器。示例

位置1-10:字段a 位置11-20:字段b 位置21-30:字段c 等

我可以使用任何设计模式来实现?我相信我应该使用访客模式

2 个答案:

答案 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的实现中。