如何预防CR/LF?

How to prevent CR/LF?

我正在使用 pdfbox 从 pdf 中阅读,显然,至少在基于 Windows 的框架上,对于换行符,它使用 unicode 本身 
&#10

我的问题是如何防止这个换行符连接到下面代码中的字符串?

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 "
&#10"
                      // before concatenating the String "x" to String "sum"
          flag=1;
       }
   }
}

拆分时应丢弃行分隔符;例如

for (final String s : x.split("\s+")) {

即使单词分隔符成为一个或多个白色space字符。

(使用 trim() 并非在所有情况下都有效。假设 x 包含 "word\r\nword"。您不会在这两个词之间拆分,并且 s将在某个时候 "word\r\nword"。然后 s.trim() 不会删除换行符,因为它们不在字符串的末尾。)


更新

我刚刚发现您实际上是在附加 x 而不是 s。所以你还需要做这样的事情:

sum += x.replaceAll("\s+", " ") + "."

这比您要求的要多一点。它用单个 space.

替换每个 whitespace 序列

顺便说一下,如果您使用 break 来跳出循环而不是乱用标志,您的代码会更简单、更高效。 (而且 Java 有一个 boolean 类型......看在老天的份上!)

   if (Keyword.toLowerCase().equals(s.toLowerCase()) && !"".equals(s)) {
       sum += ....
       break;
   }

您确定要在此处添加 x 吗?

if(Keyword.toLowerCase().equals(s.toLowerCase()) && !"".equals(s)) {
    sum+=x+"."; //here need first to check for "
&#10"
                // 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 代码)