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

时间:2018-12-20 02:40:48

标签: 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();
        }


    }

有没有一种方法可以正确忽略特殊字符或符号的每种可能组合?

2 个答案:

答案 0 :(得分:1)

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

要获得不带下划线的相同行为,请用[^a-zA-Z0-9]替换\ W

您的代码行将是:

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

答案 1 :(得分:0)

您可以使用以下内容替换除空格以外的所有特殊字符。

word = word.replaceAll("([ a-zA-Z0-9])", "");