String line = "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>" +
"<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>";我要把它变成
String line = "<p><img width='365' height='480' alt='inline' src='1299891849786.jpg' /></p>" +
"<p><img width='365' height='480' alt='inline' src='1299891849786.jpg' /></p>";
也就是说我要在img标签中增加 alt='inline',同时,要把img标签里面的src的路径放到一个数组里面去。(注意img标签外的alt 不能做处理,而且之外的src也不需取出来)
我该如何去处理这个问题,大家帮帮忙呀

解决方案 »

  1.   

    正则 替换  alt='' alt='inline'
      

  2.   

     也可以将Html转成dom解析处理
      

  3.   

    Jsoup 可以处理这种事。
    String line = "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>" +
    "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>";Document doc = Jsoup.parseBodyFragment(line);
    Elements els = doc.body().select("img");//1
    els.attr("alt","inline");//2
    ArrayList<String> imagepathlist = new ArrayList<String>();
    for(Element e:els){
        imagepathlist.add(e.attr("src"));
    }
      

  4.   


    import java.util.ArrayList;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class T {
    public static void main(String[] args) {
    String line = "<p><img width='365' height='480' alt=''  src='1299891849786.jpg' /></p>"
    + "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>";
    //替换alt=''为alt='inline'
    line =line.replaceAll("(<img.*?)(alt='')(.*?/>)", "$1 alt='inline' $3");
    //找到img中的src中的值,存入src
    ArrayList<String> src = new ArrayList<String>();
    Pattern pattern = Pattern.compile("<img.*?src=\\'(.*?)\\'.*?/>");
    Matcher matcher = pattern.matcher(line);
    while(matcher.find()) {
    String temp = matcher.group();
    int len = "src='".length();
    int start = temp.indexOf("src='");
    int end = temp.indexOf("'", start+len);
    src.add(temp.substring(start+len,end));
    }
    System.out.println(line);
    System.out.println(src);
    }
    }
      

  5.   


    字符串替换  alt='' alt='inline'剩下取出src的 可以用字符串截取 先按空格split 再按=号split如果你熟悉正则表达式 可以用正则提取~
      

  6.   

    import java.text.*;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;public class Example {
    public static void main(String[] args) {
    String line = "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>" +
    "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>";
    String regex = "alt=''";
    System.out.println(line.replaceAll(regex, "alt=inline"));

    List<String> list = new ArrayList<String>();
    String regex3 = "\\s";
    String[] str1 = line.split(regex3);
    for(int i=0; i<str1.length; i++) {
    if(str1[i].indexOf("src=")!=-1) {
    String strr[] = str1[i].split("src=");
    if(strr.length == 2) {
    list.add(strr[1]);
    }
    }
    }
    System.out.println(list);
    }}
      

  7.   

    这位仁兄的有个问题,是没有考虑alt和src是否是在img里面。楼主说的是在img里面的情况!
      

  8.   

    你好,我想再仔细的问问你,
    1、如果line 里面的<img> 标签中本身就没有alt=''标签,那我怎么给这个标签加入alt='inline'
    2、<img>标签里面的SRC图片分为本地图片和网图片,我现在只想对本地图片做处理,那我该怎么办呢??
      

  9.   

    你好,Jsoup  是哪个java类?为什么我的没有这个,还有
    Document doc = Jsoup.parseBodyFragment(line);
    Elements els = doc.body().select("img");这两个java类到底是属于哪个?我不知道选择哪个。而且我没看到有Elements  只看到了Element
      

  10.   

    个人比较笨,这种方法可以么。
    String line = "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>" +
    "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>";

    String new_line = new String();
    new_line = line.replaceAll("alt=''", "alt='inline'");
    System.out.println(new_line);
      

  11.   

    呵呵,这个不行的。万一alt=''不是在<img>标签中怎么办?
      

  12.   

    程序中找到line =line.replaceAll("(<img.*?)(alt='')(.*?/>)", "$1 alt='inline' $3");替换为下面在就可以解决问题1line =line.replaceAll("(<img.*?)(alt='')*?(.*?/>)", "$1 alt='inline' $3");
      

  13.   


    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class T {
        public static void main(String[] args) throws SocketException {
            String line = "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>"
                    + "<p><img width='365' height='480'  src='http://www.baidu.com/1299891849786.jpg' /></p>";
            //替换alt=''为alt='inline'
            line =line.replaceAll("(<img.*?)(alt='')*?(.*?/>)", "$1 alt='inline' $3");
            //找到img中的src中的值,存入src
            ArrayList<String> src = new ArrayList<String>();
            Pattern pattern = Pattern.compile("<img.*?src=\\'(.*?)\\'.*?/>");
            Matcher matcher = pattern.matcher(line);
            while(matcher.find()) {
                String temp = matcher.group();
                if(!isLocal(temp)) 
                 continue;
                int len = "src='".length();
                int start = temp.indexOf("src='");
                int end = temp.indexOf("'", start+len);
                src.add(temp.substring(start+len,end));
            }
            System.out.println(line);
            System.out.println(src);
        }
        
        /**
         * 用来判断img中src属性中的文件是否为本地的
         * @param path
         * @return
         * @throws SocketException
         */
        private static boolean isLocal(String path) throws SocketException {
          StringBuffer header = new StringBuffer();
             Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
             while(en.hasMoreElements()) {
                 NetworkInterface ni = en.nextElement();
                 Enumeration<InetAddress> enAddr = ni.getInetAddresses();
                 while(enAddr.hasMoreElements()) {
                     header.append("src=\'http:/" + enAddr.nextElement());
                     header.append("|");
                 }
             }
             header.append("src=\'http://localhost");
             //header用来判断是否为src="http://127.0.0.1或src="http://192.168.1.235”或src="http://localhost”
             
             boolean local = false;
             //用正则表达式和字符串的相关函数进行判断
             Pattern p = Pattern.compile(header.toString());
             Matcher m = p.matcher(path);
             if(m.find()) {//匹配是否为http开头的本地文件
              local = true;
             } else if(path.indexOf("src='http://") != -1) {//网络文件
                 local = false;
             } else {//否则就是本地文件
                 local = true;
             }
             return local;
        }
    }这个解决了你上面说的两个问题,应该能满足你的要求了吧。
      

  14.   

    你没有考虑到如果img 标签中本身就存在alt='' 那你的程序就会再给它加一个alt='inline' 这样一来 就成了<img alt='inline' alt=''/>
      

  15.   


    import java.util.regex.*;
    public class TestString { /**
     * @param args
     */
    static String[] test(String str){
    String p1="<img[^>]+alt=";
    String _p1="<img[^>]+alt='[a-zA-Z]*'";
    Pattern one= Pattern.compile(p1),two=Pattern.compile(_p1);
    Matcher matcher1=one.matcher(str),matcher2=two.matcher(str);
    int array_time=0;
    while(matcher1.find()&&matcher2.find()){
    ++array_time;
    str=str.replace(matcher2.group(),matcher1.group()+"'inline'" );
    }
    System.out.println(str);

    String p2="<img[^>]+.jpg";
    one=Pattern.compile(p2);
    String[] array=new String[array_time];
    array_time=0;
    Matcher matcher3=one.matcher(str);
    while(matcher3.find()){
    array[array_time++]=matcher3.group().substring(matcher3.group().indexOf("src='")+5);
    }

    return array;
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
     String line = "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>" +
      "<p><img width='365' height='480' alt='' src='1299891849786.jpg' /></p>";
            String[] array=test(line);
            for(String s:array) 
             System.out.println(s);
    }}