我有一个程序,可以从 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/