内容解析,使用了大量if else语句,感觉不方便维护,有没有优化空间?

发布于 2023-12-12 15:17:53

用java写的一段文本解析:

//List<String> 内容
[ti:我本闺中一钗裙]
[oti:我本闺中一钗裙]
[jz:黄梅戏]
[jm:女驸马]
[ojm:女驸马]
[offset:-1]
[by:制作者]
[ver:驸马公主合唱]
[keys:民女,洞房]
[00:04.99](驸马):我本闺中一钗裙
[00:31.93](公主白):此话当真
[00:34.19](驸马):公主请看耳环痕
[00:59.33]<结束>

/**
     * 解析唱段内容
     *
     * @param changDuan  唱段对象
     * @param line       当前需要解析的内容 即上面 List<String> 每一行内容
     * @param patternMap 唱段正则表达式 可以正则匹配上面 List<String> 内容
     * @throws ParseLrcException
     */
private static void parseLrcContent(ChangDuan changDuan, String line, Map<String, Pattern> patternMap) throws ParseLrcException {

        if (matcher(line, patternMap, LrcConstants.LrcRegEnum.TITLE.name())) {
            changDuan.setName(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.TITLE.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.ORIGIN_TITLE.name())) {
            changDuan.setOriginName(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.ORIGIN_TITLE.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.JUMU.name())) {
            changDuan.setJuMu(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.JUMU.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.ORIGIN_JUMU.name())) {
            changDuan.setOriginJuMu(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.ORIGIN_JUMU.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.OFFSET_REG.name())) {
            changDuan.setOffset(Integer.parseInt(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.OFFSET_REG.getStartIndex())));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.JU_ZHONG.name())) {
            changDuan.setJuZhong(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.JU_ZHONG.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.BEIZHU.name())) {
            changDuan.setBeiZhu(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.BEIZHU.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.VERSION.name())) {
            changDuan.setVersion(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.VERSION.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.KEYS.name())) {
            changDuan.setSearchKeys(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.KEYS.getStartIndex()));
        } else if (matcher(line, patternMap, LrcConstants.LrcRegEnum.BY.name())) {
            changDuan.setMaker(getChangDuanInfoContent(line, LrcConstants.LrcRegEnum.BY.getStartIndex()));
        } else {
            throw new ParseLrcLineException(line);
        }
    }

上段代码是用于将List<String>解析成ChangDuan对象。

感觉if else太多了,时间长了以后会不好维护,修改起来费劲。想请教一下这类代码能否优化?

查看更多

关注者
0
被浏览
615
0 个回答
暂无答案,快来添加答案吧

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览