您的位置:首页 > 汽车 > 新车 > 优秀设计作品赏析_有创意的web毕设题目_海南乐秀同城群软件下载_关键词搜索排名怎么查看

优秀设计作品赏析_有创意的web毕设题目_海南乐秀同城群软件下载_关键词搜索排名怎么查看

2025/1/11 18:01:50 来源:https://blog.csdn.net/weixin_38203586/article/details/144969618  浏览:    关键词:优秀设计作品赏析_有创意的web毕设题目_海南乐秀同城群软件下载_关键词搜索排名怎么查看
优秀设计作品赏析_有创意的web毕设题目_海南乐秀同城群软件下载_关键词搜索排名怎么查看

废话少说,上干货!!!

        示例文件:

表1 XXX(XXXXX)表

名称

编码

长度

数据类型

非空

主键

外键

正则校验

值域范围

                                                                表2 XXXX表

名称

编码

长度

数据类型

非空

主键

外键

以上数据库表设计中,如何去解析并打印出具体的内容呢?

直接上程序:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class Test {public static void main(String[] args) {try (PDDocument document = PDDocument.load(new File("C:\\Users\\AA\\Desktop\\test.pdf"))) {PDFTextStripper pdfStripper = new PDFTextStripper();String text = pdfStripper.getText(document);extractTableInfo(text);} catch (IOException e) {e.printStackTrace();}}/*** 提取表名称** @param text* @return*/private static void extractTableInfo(String text) {boolean titleStart = false;boolean titleEnd = false;boolean headStart = false;boolean headEnd = false;boolean contentStart = false;String preTableTile = "";//记录当前表标题名StringBuilder tablePreTile = new StringBuilder();//当前的表格标题List<String> originList = new ArrayList<>();// 按行分割文本String[] lines = text.split("\\r?\\n");for (String line : lines) {line = line.trim();//如果一行是纯数字,则可能是解析出的页码,过滤掉if (isPureDigit(line)) {continue;}//如果是以GJB或者JB开头,可能是标题,过滤掉if (isGJB(line)) {continue;}//--------------------------表名称解析--------------------------if ((line.startsWith("表") && line.endsWith("表")) || (line.startsWith("表") && line.length() < 20)) {//标题仅有一行的处理titleEnd = true;titleStart = false;headStart = true;if (originList.size() > 0) {reSort(originList);originList = new ArrayList<>();}tablePreTile.append(line.trim());preTableTile = tablePreTile.toString();tablePreTile.setLength(0);//标题置空System.out.println("【表】" + preTableTile);continue;}if (line.startsWith("表") && line.length() > 20 && (!line.endsWith("表"))) {//如果标题为多行,第一行处理titleStart = true;tablePreTile.append(line.trim());if (originList.size() > 0) {reSort(originList);originList = new ArrayList<>();}continue;}if (titleStart && (!titleEnd) && (!line.endsWith("表"))) {//如果标题为多行,中间行(非尾行)处理tablePreTile.append(line.trim());continue;}if (titleStart && line.endsWith("表")) {//如果标题为多行,尾行处理titleEnd = true;titleStart = false;headStart = true;tablePreTile.append(line.trim());preTableTile = tablePreTile.toString();tablePreTile.setLength(0);//标题置空System.out.println("【表】" + preTableTile);continue;}//--------------------------表格头解析--------------------------if (titleEnd && !titleStart && headStart && !titleStart && countSpaces(line) >= 5) {//标题解析结束后,开始解析表头,//普通文字或者其他杂乱字符部分,表内容至少包括:名称、代码、类型、非空、主外键这5个,则直接丢弃System.out.println("【表头】" + line);headStart = false;headEnd = true;contentStart = true;continue;}//--------------------------表内容记录--------------------------if (!line.trim().equals("")) {//过滤空行if (headEnd && !headStart && contentStart) {originList.add(line);}}}//针对最后的行处理if (originList.size() > 0) {reSort(originList);}}/*** 对内容进行重新排列** @param originList*/private static void reSort(List<String> originList) {if (originList.size() > 0) {// 定义最大长度 x/*    int maxLength = getMaxSplitLength(originList);*/// 结果列表List<String> result = new ArrayList<>();// 遍历字符串列表for (int i = 0; i < originList.size(); i++) {String current = originList.get(i);String[] split = current.split(" ");int splitLength = split.length;if (splitLength < 6) {//如果按行列宽至少5个字段,如果小于6,则是被分割字段,需要进行拼接重组boolean hasChinese = containsChinese(current);if (hasChinese) {// 向后拼接while (i + 1 < originList.size() && splitLength < 6) {String next = originList.get(++i);current += next; // 向后拼接split = current.split(" ");splitLength = split.length;}} else {// 向前拼接if (i > 0) {String previous = result.remove(result.size() - 1);current = previous + " " + current; // 向前拼接}}}// 将拼接后的字符串添加到结果列表result.add(current);}// 输出结果for (String res : result) {System.out.println("【表内容】" + res);}}}/*** 计算字符串中空格的数量** @param str 输入字符串* @return 空格数量*/private static int countSpaces(String str) {if (str == null) {return 0; // 如果字符串为 null,返回 0}int count = 0;for (char c : str.toCharArray()) {if (c == ' ') {count++;}}return count;}// 判断字符串是否纯数字private static boolean isPureDigit(String line) {return line.matches("\\d+");}// 判断字符串是否纯数字private static boolean isGJB(String line) {return line.startsWith("GJB") || line.startsWith("JB");}// 判断字符串是否包含中文private static boolean containsChinese(String str) {for (char c : str.toCharArray()) {if (Character.UnicodeScript.of(c) == Character.UnicodeScript.HAN) {return true;}}return false;}// 计算最大分割长度的函数private static int getMaxSplitLength(List<String> strings) {int maxLength = 0;for (String s : strings) {// 按空格分割字符串String[] split = s.split(" ");// 更新最大长度maxLength = Math.max(maxLength, split.length);}return maxLength;}
}

需要用到的JAR包:

pdfbox-2.0.32.jar

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com