我有java程序,它将从服务器接收纯文本.纯文本可能包含URL.Java库中是否有任何类将纯文本转换为HTML文本?还是其他任何图书馆?如果没有那么解决方案是什么?
Dan*_*iel 25
您应该以编程方式对文本进行一些替换.以下是一些线索:
"<br>\n"(\n \n,以便更好地读取输出)." ""<""&""&#"+((int)myChar)+";",以使其在每个编码中都可读."http://[^ ]+",或者"www.[^ ]"像JB Nizet所说的那样转换它们.到"<a href=\""+url+"\">"+url+"</a>",但只有在完成所有其他替换之后.执行此操作的代码如下所示:
public static String escape(String s) {
StringBuilder builder = new StringBuilder();
boolean previousWasASpace = false;
for( char c : s.toCharArray() ) {
if( c == ' ' ) {
if( previousWasASpace ) {
builder.append(" ");
previousWasASpace = false;
continue;
}
previousWasASpace = true;
} else {
previousWasASpace = false;
}
switch(c) {
case '<': builder.append("<"); break;
case '>': builder.append(">"); break;
case '&': builder.append("&"); break;
case '"': builder.append("""); break;
case '\n': builder.append("<br>"); break;
// We need Tab support here, because we print StackTraces as HTML
case '\t': builder.append(" "); break;
default:
if( c < 128 ) {
builder.append(c);
} else {
builder.append("&#").append((int)c).append(";");
}
}
}
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
但是,尚未添加链接转换.如果有人这样做,请更新代码.
我找到了使用模式匹配的解决方案.这是我的代码 -
String str = "(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\".,<>?«»“”‘’]))";
Pattern patt = Pattern.compile(str);
Matcher matcher = patt.matcher(plain);
plain = matcher.replaceAll("<a href=\"$1\">$1</a>");
Run Code Online (Sandbox Code Playgroud)
以下是输入和输出 -
输入文本是可变的plain:
some text and then the URL http://www.google.com and then some other text.
Run Code Online (Sandbox Code Playgroud)
输出:
some text and then the URL <a href="http://www.google.com">http://www.google.com</a> and then some other text.
Run Code Online (Sandbox Code Playgroud)