java - 从文本提取中省略特殊字符

标签 java

我有一个程序,可以从 PDF 文件中提取文本或单词,并将这些单词插入数据库中的表中。

在插入过程中,我有一个特殊的正则表达式来省略单词中存在的特殊字符。规则是,如果任何单词在单词前面或单词末尾有特殊字符,则会将其删除。

示例:

Text : `,test.`
Token : `test`
Text: ?good
Token : good 
 Text: ?,.
 Token:
 Text: www.stack.com
 Token: www.stack.com

只要字符之间没有空格,特殊字符就会保留。至少我是这么定义的。

这是我定义要存储的单词的总体思路。但是,当涉及到某些单词(例如下划线)时:

Text: _
Token : Same as above

Text: _—,m‘—_
Token : same as above

它似乎没有将下划线视为特殊字符。

我的代码:

String lines[] = text.split("\\r?\\n");
    for (String line : lines) {
        String[] words = line.split(" ");

        System.out.println("Line: " + line);



        preparedStatement = con1.prepareStatement(sql);
        int i=0;
        for (String word : words) {

            // check if one or more special characters at end of string then remove OR
            // check special characters in beginning of the string then remove
            // insert every word directly to table db
            word = word.replaceAll("([\\W]+$)|(^[\\W]+)", "");
            preparedStatement.setString(1, path1);
            preparedStatement.setString(2, word);
              System.out.println("Token: " +word);
            preparedStatement.executeUpdate();
        }


    }

有没有办法正确忽略特殊字符或符号的所有可能组合?

最佳答案

\W 的定义是 [^a-zA-Z_0-9](参见 Java Pattern API)。

因此,要获得没有下划线的相同行为,请将\W 替换为 [^a-zA-Z0-9]

您的代码行将是:

word = word.replaceAll("([^a-zA-Z_0-9]+$)|(^[^a-zA-Z_0-9]+)", "");

关于java - 从文本提取中省略特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861748/

相关文章:

java - 如何在Java中Parcelable类中打包Object类型

java - 将数据库中的数据显示到 TextView 中 (Android)

java - Caused by : java. lang.IllegalStateException : Ambiguous mapping found. Cannot map 'appController' bean method

java - MailChimp 3.0 HTTP POST Json 示例

javascript - 在 java 中将数组从 javascript 转换为 JSONArray

java - 递增数字作为 Firestore 文档名称?

java - 元数据值中的 resource_type_id 是什么?

java - 如何在 Java 中对日期进行算术运算?

java - Spring-data-jpa OneToOne 单向问题

java - Java中如何读写串口通信?