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);  // 指定坐标插入表格

 

posted @ 2019-04-02 09:30  一叶一世界abandon  阅读(703)  评论(0编辑  收藏  举报