我有一个程序,可以从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();
}
}
有没有一种方法可以正确忽略特殊字符或符号的每种可能组合?
答案 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])", "");