我正在使用pdfbox从pdf中读取数据,显然,至少在基于Windows的框架中,对于中断行,它使用unicode作为 
。
我的问题是,如何防止这个破行字符连接到下面代码中的字符串?
tokenizer =new StringTokenizer(Text,"\\.");
while(tokenizer.hasMoreTokens())
{
String x= tokenizer.nextToken();
flag=0;
for(final String s :x.split(" ")) {
if(flag==1)
break;
if(Keyword.toLowerCase().equals(s.toLowerCase()) && !"".equals(s)) {
sum+=x+"."; //here need first to check for " 
"
// before concatenating the String "x" to String "sum"
flag=1;
}
}
}发布于 2016-03-31 15:38:03
当你分开时,你应该丢弃分隔线。
for (final String s : x.split("\\s+")) {这使单词分隔符成为一个或多个空白字符。
(使用trim()并不能在所有情况下都起作用。假设x包含"word\r\nword"。您不会在这两个单词之间分开,s在某个时候将是"word\r\nword"。那么s.trim()将不会删除换行字符,因为它们不在字符串的末尾。)
更新
我刚刚发现您实际上是在追加x而不是s。所以你也需要做这样的事情:
sum += x.replaceAll("\\s+", " ") + "."这比你要求的要多一点。它用一个空格替换每个空格序列。
顺便说一句,如果您使用break来脱离循环而不是乱动一个标志,那么您的代码就会更简单、更高效。(而且Java有一个boolean类型..。看在上帝的份上!
if (Keyword.toLowerCase().equals(s.toLowerCase()) && !"".equals(s)) {
sum += ....
break;
}发布于 2016-03-31 15:52:06
您确定要在这里添加x吗?
if(Keyword.toLowerCase().equals(s.toLowerCase()) && !"".equals(s)) {
sum+=x+"."; //here need first to check for " 
"
// before concatenating the String "x" to String "sum"
flag=1;
}你不想要s吗
sum += s + ".";更新
哦,我明白了。所以你真正想要的是:
tokenizer = new StringTokenizer(Text,"\\.");
Pattern KEYWORD = Pattern.compile("\\b"+Keyword+"\\b", Pattern.CASE_INSENSITIVE);
StringBuilder sb = new StringBuilder(sum);
while(tokenizer.hasMoreTokens())
{
String x = tokenizer.nextToken();
if (KEYWORD.matcher(x).find()) {
sb.append(x.replaceAll("\\s+", " ")).append('.');
}
}
sum = sb.toString();(假设关键字以字母开头和结尾,并且本身不包含任何RegEx代码)
https://stackoverflow.com/questions/36337718
复制相似问题