按空格分割但不是换行符

时间:2013-07-17 17:55:56

标签: java regex url

我正在尝试使用以下代码将给定字符串中的所有链接转换为可点击的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?

我认为它包括换行符也在进行拆分时。

在这种情况下如何保留换行符?

3 个答案:

答案 0 :(得分:2)

你可以使用

  

String [] parts = comment.split(“\\”);

而不是

  

String [] parts = comment.split(“\\ s”);

正如埃尔德里斯所说,“\ 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)。

修改

要获得最佳编码实践,您应将replacementFormatpattern变量设置为常量(因此,final static String REPLACEMENT_FORMAT等)。

编辑II

实际上,对URl模式进行分组并不是必需的,因为空白前瞻就足够了。但是,好吧,我将它保留原样,它有效。

答案 2 :(得分:1)

我建议您解决问题:

  1. 首先按新行字符分割
  2. 对于每行进行上述处理
  3. 添加所有已处理的行
  4. 这样可以保留换行符,并且您也可以在每行中执行您当前正在执行的操作。

    希望这有帮助。

    干杯!!