繁体   English   中英

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

[英]java - omitting special characters from text extraction

我有一个程序,可以从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]+)", "");

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM