• Java文本标签处理


    public void findText(List<String> textList, List<String> labelList) {
            if (null == textList || textList.size() == 0 || null == labelList || labelList.size() == 0) {
                return;
            }
            // 目标标签
            Set<String> labelSet = new HashSet<>(64);
            String targetText, labelText;
            int index, lastIndex, textLength;
            boolean legal = true;
            for (String text : textList) {
                targetText = text;
                while (StringUtils.isNoneBlank(targetText)
                        && -1 != (index = targetText.indexOf("#{"))
                        && -1 != (lastIndex = targetText.indexOf("}"))) {
                    // 避免出现类似于“}}}text#{”的情况出现
                    while (lastIndex < index) {
                        targetText = targetText.substring(lastIndex + 1);
                        index = targetText.indexOf("#{");
                        lastIndex = targetText.indexOf("}");
                        if (-1 == lastIndex) {
                            legal = false;
                            break;
                        }
                    }
                    if (!legal) {
                        break;
                    }
    
                    labelText = targetText.substring(index + 2, lastIndex);
                    // 解决“#{{{{#{labelName}}”读到 {{{#{labelName 的情况
                    while (-1 != (index = labelText.indexOf("#{")) && index < lastIndex) {
                        labelText = labelText.substring(index + 2);
                    }
                    labelSet.add(labelText.trim());
    
                    textLength = targetText.length();
                    if ((lastIndex + 1) < textLength) {
                        targetText = targetText.substring(lastIndex + 1);
                    } else {
                        break;
                    }
                }
            }
    
            // 将从文本中读到的labelSet集合中的标签,筛选出符合labelList中的目标标签
        }
     public void replaceText(XWPFParagraph paragraph) {
            if (null == paragraph) {
                return;
            }
            List<XWPFRun> runList = paragraph.getRuns();
            if (null == runList || 0 == runList.size()) {
                return;
            }
            int length = runList.size();
            for (int i = 0; i < length; i++) {
                XWPFRun run = runList.get(i);
    
                String targetText = run.getText(0);
                if (StringUtils.isBlank(targetText)) {
                    continue;
                }
    
                if (targetText.contains("#") && !targetText.contains("}")) {
                    int endIndex = -1;
                    String tempText;
                    for (int j = i + 1; j < length; j++) {
                        tempText = runList.get(j).getText(0);
                        if (tempText.contains("}")) {
                            endIndex = j;
                            break;
                        }
                    }
                    if (-1 != endIndex) {
                        int tempIndex = targetText.lastIndexOf("#");
                        String prifix = targetText.substring(tempIndex, targetText.length());
                        targetText = targetText.substring(0, tempIndex);
    
                        StringBuilder finalText = new StringBuilder(prifix);
                        for (int k = i + 1; k <= endIndex; k++) {
                            String tText = runList.get(k).getText(0);
                            if (k == endIndex) {
                                int tIndex1 = tText.indexOf("}");
                                int tIndex2 = tText.indexOf("#");
                                if (tIndex1 < tIndex2 && k + 2 <= length) {
                                    String lastTempText1 = tText.substring(0, tIndex1 + 1);
                                    String lastTempText2 = tText.substring(tIndex1 + 1, tText.length());
    
                                    runList.get(k + 1).setText(lastTempText2 + runList.get(k + 1).getText(0), 0);
    
                                    finalText.append(lastTempText1);
                                } else {
                                    finalText.append(tText);
                                }
                            } else {
                                finalText.append(tText);
                            }
    
                            if (k == endIndex) {
                                runList.get(k).setText(finalText.toString(), 0);
                            } else {
                                runList.get(k).setText("", 0);
                            }
                        }
                    }
                } else if (targetText.contains("#{") && targetText.contains("}") && i + 2 <= length) {
                    int index = targetText.indexOf("}");
                    String suffix = targetText.substring(index + 1);
                    targetText = targetText.substring(0, index + 1);
                    XWPFRun secondRun = runList.get(i + 1);
                    secondRun.setText(suffix + secondRun.getText(0), 0);
                }
                // 标签替换
                // 可以做一个枚举,一个判断是生成样式还是只做文字替换。如果是文件替换,可以直接使用targetText.replace
                // 如果是生成样式,则使用POI
            }
        }
     XmlCursor cursor = paragraph.getCTP().newCursor();
     XWPFTable tableOne = doc2.insertNewTbl(cursor);  // 指定坐标插入表格
  • 相关阅读:
    [原创]Java在线编辑word文档调用PageOffice实现并发控制
    [原创]Java动态填充word文档并上传到服务器
    mysql数据类型
    mysql 数据增删改查基本语句
    MYSQL中char 与 varchar 的区别
    MYSQL 同时执行多条SQL语句
    关于MyEclipse10编辑JSP卡顿现象
    鼠标悬停放大图片效果
    简单实现 飘浮 广告层特效
    简单实现 特效(董侨JonneyDong)
  • 原文地址:https://www.cnblogs.com/yang21/p/10640605.html
Copyright © 2020-2023  润新知