我正在尝试使用以下代码将给定字符串中的所有链接转换为可点击的a
标记:
String [] parts = comment.split("\\s");
String newComment=null;
for( String item : parts ) try {
URL url = new URL(item);
// If possible then replace with anchor...
if(newComment==null){
newComment="<a href=\"" + url + "\">"+ url + "</a> ";
}else{
newComment=newComment+"<a href=\"" + url + "\">"+ url + "</a> ";
}
} catch (MalformedURLException e) {
// If there was an URL that was not it!...
if(newComment==null){
newComment = item+" ";
}else{
newComment = newComment+item+" ";
}
}
适用于
Hi there, click here http://www.google.com ok?
将其转换为
Hi there, click here <a href="http://www.google.com">http://www.google.com</a> ok?
但是当字符串是这样的时候:
Hi there, click
here http://www.google.com
ok?
仍在将其转换为:
Hi there, click here <a href="http://www.google.com">http://www.google.com</a> ok?
我希望最终结果是:
Hi there, click
here <a href="http://www.google.com">http://www.google.com</a>
ok?
我认为它包括换行符也在进行拆分时。
在这种情况下如何保留换行符?
答案 0 :(得分:2)
你可以使用
String [] parts = comment.split(“\\”);
而不是
正如埃尔德里斯所说,“\ s”适用于每个空格字符,所以“\”,对于空间字符本身应该为你做的。String [] parts = comment.split(“\\ s”);
答案 1 :(得分:2)
我建议采用不同的方法:
String noNewLines = "Hi there, click here http://www.google.com ok?";
String newLines = "Hi there, \r\nclick here \nhttp://www.google.com ok?";
// This is a String format with two String variables.
// They will be replaced with the desired values once the "format" method is called.
String replacementFormat = "<a href=\"%s\">%s</a>";
// The first round brackets define a group with anything starting with
// "http(s)". The second round brackets delimit that group by a lookforward reference
// to whitespace.
String pattern = "(http(s)?://.+?)(?=\\s)";
noNewLines = noNewLines.replaceAll(
pattern,
// The "$1" literals are group back-references.
// In our instance, they reference the group enclosed between the first
// round brackets in the "pattern" String.
new Formatter().format(replacementFormat, "$1", "$1")
.toString()
);
System.out.println(noNewLines);
System.out.println();
newLines = newLines.replaceAll(
pattern,
new Formatter().format(replacementFormat, "$1", "$1")
.toString()
);
System.out.println(newLines);
输出:
Hi there, click here <a href="http://www.google.com">http://www.google.com</a> ok?
Hi there,
click here
<a href="http://www.google.com">http://www.google.com</a> ok?
这将替换您的所有http(s)链接到锚引用,无论您的文本中是否有换行符(windows或* nix)。
修改强>
要获得最佳编码实践,您应将replacementFormat
和pattern
变量设置为常量(因此,final static String REPLACEMENT_FORMAT
等)。
编辑II
实际上,对URl模式进行分组并不是必需的,因为空白前瞻就足够了。但是,好吧,我将它保留原样,它有效。
答案 2 :(得分:1)
我建议您解决问题:
这样可以保留换行符,并且您也可以在每行中执行您当前正在执行的操作。
希望这有帮助。
干杯!!