有没有什么好的方法将用户输入的一个字符串中以@开始的找出来,加上链接,但如果@以email的形式出现的就忽略,保留原来的形式。
第一个要求用正则表达式就可以实现但第二个好像有点困难啊....public static void main(String[] args) {  
        String reg="@.*?(?=[.,:;!?\\s#@。,:;!?])";  
        Pattern pattern=Pattern.compile(reg);  
        System.out.println(pattern.toString());  
        Matcher matcher=pattern.matcher("fsafaf加大@梵净山,金佛山@就佛网 杰弗里斯[email protected] fsla");  
        StringBuffer sb=new StringBuffer();  
        while(matcher.find()){  
            System.out.println(matcher.group());  
            matcher.appendReplacement(sb, "<a href='abc'>"+matcher.group()+"</a>");  
        }  
        matcher.appendTail(sb);  
        System.out.println(sb);  
    }

解决方案 »

  1.   

    那你考虑过有用户叫类似sina.com的没 如果是这种情况那@前面只要有字符那你就得认定是邮件而不是@名字
      

  2.   

    改造了一下,看符不符合哈哈。public static void main(String[] args) {
    String reg = "([a-zA-Z0-9-.]*)@(.*?)([,:;!?\\s#@。,:;!?]|$|\\.(?:com|org|net))";
    Pattern pattern = Pattern.compile(reg);
    System.out.println(pattern.toString());
    Matcher matcher = pattern
    .matcher("fsafaf加大@梵净山,金佛山@就佛网 杰弗里斯[email protected] fsla;@sina.com;ssd@sina");
    StringBuffer sb = new StringBuffer();
    while (matcher.find()) {
    String begin = matcher.group(1);
    String middle = matcher.group(2);
    String end = matcher.group(3); // 判断email
    if (!begin.equals("")) {
    boolean isEmail = middle.length() != 0;
    for (int i = 0; i < middle.length(); i++) {
    if (!Character.isLetterOrDigit(middle.charAt(i))) {
    isEmail = false;
    break;
    }
    }
    if (isEmail) {
    if (end.length() > 1) {
    //确认是email
    continue;
    }
    }
    } matcher.appendReplacement(sb, begin + "<a href='abc'>" + "@"
    + middle + "</a>" + end);
    }
    matcher.appendTail(sb);
    System.out.println(sb); }
      

  3.   

    谢谢!!我能想到的是先用email的正则将所有的email用特殊标记替换掉,再用上面的方法给@的字符串加链接,再将原来的email放回去。
    还是4楼的更有技术含量些。\(^o^)/