如何预防CR/LF?
How to prevent CR/LF?
我正在使用 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;
}
}
}
拆分时应丢弃行分隔符;例如
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 " 
"
// 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 代码)
我正在使用 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;
}
}
}
拆分时应丢弃行分隔符;例如
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 " 
"
// 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 代码)