String regex = "\\s*|(\r\n)";
System.out.println(str.replaceAll(regex, ""));

解决方案 »

  1.   

    String htmlcod = htmlcode.replace(" ","")
      

  2.   

    对于 <a href="http://www.google.com/">Google</a> 这样的内容,上面的替换有问题。
    另外 pre 这样的标签处理后显示就变形了。
      

  3.   

    <pclass='yk-h-weather-popup-pic'><imgwidth='70'height='65'src="http://k.kbcdn.com/images/weather/a32.gif"/>
    这样的结果,不好
    要求只替换 标签之间的,标签里的属性空格要保留。
    <body> <table>要求:
    1、给出能替换标签之间换行的代码
    2、给出能替换标签之间存在空格的代码
    换行与空格替换仅存在于标签之间,其它位置不替换/
      

  4.   

    有问题,测试不能通过
    错误如下:
    Exception in thread "main" java.lang.StackOverflowError
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
    at java.util.regex.Pattern$GroupTail.match(Unknown Source)
    at java.util.regex.Pattern$BranchConn.match(Unknown Source)
    at java.util.regex.Pattern$CharProperty.match(Unknown Source)
    at java.util.regex.Pattern$Branch.match(Unknown Source)
    at java.util.regex.Pattern$GroupHead.match(Unknown Source)
    at java.util.regex.Pattern$Loop.match(Unknown Source)
      

  5.   

    请完整复制一下代码重新测试,一定是你自己对代码做过修改,造成了无限循环import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test{
        public static void main(String[] args){
            String content = "<html>       " + "\n" +
                              "<head>      "  + "\n" + 
                              "<title></title>    " + "\n" +
                              "</head>    " + "\n" +
                               "<body onload='method();'> <table></table>   " + "\n" +  
                              "</body>   " + "\n" + 
                              "</html>";        String result = lostGaps(content);
            System.out.println(result);
        }    public static String lostGaps(String content){
            String regex = "(.+?>)\\s+\n?(<(.|\n)*)";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(content);
            //System.out.println(matcher.find());
            while(matcher.find()){
                //System.out.println("get here");
                content = matcher.group(1) + matcher.group(2);
                matcher = pattern.matcher(content);
            }
            return content;
        }
    }
      

  6.   

    测试网址是http://www.csdn.net的源代码
    str的内容正常,但调用lostGaps就出问题了
      

  7.   

    你的源代码没有问题,但通过流读取csdn的源代码进行处理的时候就出问题了
      

  8.   

    1.你说用CSDN的源文件来测试对这个我表示怀疑。里面那么多的引号什么的估计谁也不会去慢慢加斜杠。
    2.你的需求到底是什么,如果说是突发奇想觉得好玩的话那么请你自己写代码测试下。
    3.如果你是真的想处理问题的话请帖你的源代码出来
      

  9.   

    下面是源代码,谢谢import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.*;public class TestParser {  
        public static void main(String[] args) throws Exception{
     
         StringBuffer document = new StringBuffer();  
         try  
         {  
         URL url = new URL("http://www.csdn.net");  
         URLConnection conn = url.openConnection();  
         BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
         String line = null;  
         while ((line = reader.readLine()) != null)  
         document.append(line + " ");  
         reader.close();  
         }      
         catch (Exception e)  
         {  
         e.printStackTrace();  
         }  
         System.out.println(lostGaps(document.toString()));  
            
        }
        public static String lostGaps(String content){
            String regex = "(.+?>)\\s+\n?(<(.|\n)*)";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(content);
            //System.out.println(matcher.find());
            while(matcher.find()){
                //System.out.println("get here");
                content = matcher.group(1) + matcher.group(2);
                matcher = pattern.matcher(content);
            }
            return content;
        }   
    }
      

  10.   


    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.*;public class Test {  
        public static void main(String[] args) throws Exception{
     
         StringBuffer document = new StringBuffer();  
         try  
         {  
         URL url = new URL("http://www.csdn.net");  
         URLConnection conn = url.openConnection();  
         BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
         String line = null;  
         while ((line = reader.readLine()) != null)  
         document = document.append(line + "\r\n");  
         reader.close();  
         }      
         catch (Exception e)  
         {  
         e.printStackTrace();  
         }  
         System.out.println(document.toString());
         System.out.println(lostGaps(document.toString()));  
            
        }
        public static String lostGaps(String content){
            String regex = "(.+?>)\\s+\n?(<(.|\n)*)";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(content);
            //System.out.println(matcher.find());
            while(matcher.find()){
                //System.out.println("get here");
                content = matcher.group(1) + matcher.group(2);
                matcher = pattern.matcher(content);
            }
            return content;
        }   
    }
    更疑惑的是document.append(line + "\r\n"); 用\r\n代替"  "之后
    运行没有错,但结果是:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">其它的内容都没有了
      

  11.   


    str = str.replaceAll("(?<=\\>)(?:\\s*\r?\n?)(?=\\<)","");
      

  12.   

    谢谢~~~
    可行。
    请问,能把页面的script脚本去掉吗?
      

  13.   

    能不用正则表达式/不用JAVA不?!
    上C 词法分析
      

  14.   

    试试:str.replaceAll("(?s)\\<script.*?\\</script\\>","");
      

  15.   

    谢谢兄弟但还有一个问题
    我过滤百度的时候,有些样式脚本没有去掉。<!doctype html><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>百度一下,你就知道      </title><style>body{font:12px arial;text-align:center;background:#fff}body,p,form,ul{margin:0;padding:0}body,form,#fm,#lg img{position:relative}td{text-align:left}img{border:0}a{color:#00c}a:active{color:#f60}#u{padding:7px 10px 3px 0;text-align:right}#m{width:650px;margin:0 auto}#nv{font-size:16px;margin:0 0 4px -51px}#nv a,#nv b,#su,#lk{font-size:14px}#lg{margin:-17px 0 9px}#fm{padding-left:100px;text-align:left}#kw{width:391px;padding:3px 1px;margin:0 6px 0 0;font:16px/16px arial}#su{width:78px;height:28px;line-height:24px}#kw,#su{vertical-align:middle}#lk{margin:33px 0}#lk span{font:14px "宋体"}#lm{height:60px}#lh{margin:16px 0 5px;font:12px "宋体"}#lh a{font:12px arial}#mCon{position:absolute;right:7px;*top:9px;top:5px;cursor:pointer;padding:0 18px 0 0;background:url(http://www.baidu.com/img/arr.gif) no-repeat right center}#mCon span{color:#00c;cursor:default;display:block;padding-top:3px}#mCon .hw{text-decoration:underline;cursor:pointer}#mMenu{width:56px;border:1px solid #9a99ff;list-style:none;position:absolute;right:7px;top:28px;display:none;background:#fff}#mMenu a{width:100%;height:100%;display:block;line-height:22px;text-indent:6px;text-decoration:none}#mMenu a:hover{background:#d9e1f6}#mMenu .ln{height:1px;background:#ccf;overflow:hidden;margin:2px;font-size:1px;line-height:1px}#cp,#cp a{color:#77c}</style></head><body><p id="u"><a href="/gaoji/preferences.html">搜索设置</a>&nbsp;|&nbsp;<a href="http://passport.baidu.com/?login&tpl=mn">登录</a></p><div id="m"><p id="lg"><img src="http://www.baidu.com/img/baidu_logo.gif" width="270" height="129" usemap="#mp"></p><p id="nv"><a href="http://news.baidu.com">新&nbsp;闻</a> <b>网&nbsp;页</b> <a href="http://tieba.baidu.com">贴&nbsp;吧</a> <a href="http://zhidao.baidu.com">知&nbsp;道</a> <a href="http://mp3.baidu.com">MP3</a> <a href="http://image.baidu.com">图&nbsp;片</a> <a href="http://video.baidu.com">视&nbsp;频</a> <a href="http://map.baidu.com">地&nbsp;图</a></p><div id="fm"><form name="f" action="s"><input type="text" name="wd" id="kw" maxlength="100"><input type="submit" value="百度一下" id="su"></form><div id="mCon"><span>输入法</span></div><ul id="mMenu"><li><a href="#" name="ime_hw">手写</a></li><li><a href="#" name="ime_py">拼音</a></li><li class="ln"></li><li><a href="#" name="ime_cl">关闭</a></li></ul></div><p id="lk"><a href="http://hi.baidu.com">空间</a> <a href="http://baike.baidu.com">百科</a> <a href="http://www.hao123.com">hao123</a><span> | <a href="/more/">更多&gt;&gt;</a></span></p><p id="lm"></p><p><a id="st" onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.baidu.com')" href="http://utility.baidu.com/traf/click.php?id=215&url=http://www.baidu.com">把百度设为主页</a></p><p id="lh"><a href="http://e.baidu.com/?refer=888">加入百度推广</a> | <a href="http://top.baidu.com">搜索风云榜</a> | <a href="http://home.baidu.com">关于百度</a> | <a href="http://ir.baidu.com">About Baidu</a></p><p id="cp">&copy;2011 Baidu <a href="/duty/">使用百度前必读</a><a href="http://www.miibeian.gov.cn" target="_blank">京ICP证030173号</a><img src="http://gimg.baidu.com/img/gs.gif"></p></div><map name="mp"><area shape="rect" coords="43,22,227,91" href="http://hi.baidu.com/baidu/" target="_blank" title="点此进入 百度的空间"></map></body></html><!--d6896c28c03e0c49-->
    如果能够把下面这类似的代码去掉的话,更好。
    <style>body{font:12px arial;text-align:center;background:#fff}body,p,form,ul{margin:0;padding:0}body,form,#fm,#lg img{position:relative}td{text-align:left}img{border:0}a{color:#00c}a:active{color:#f60}#u{padding:7px 10px 3px 0;text-align:right}#m{width:650px;margin:0 auto}#nv{font-size:16px;margin:0 0 4px -51px}#nv a,#nv b,#su,#lk{font-size:14px}#lg{margin:-17px 0 9px}#fm{padding-left:100px;text-align:left}#kw{width:391px;padding:3px 1px;margin:0 6px 0 0;font:16px/16px arial}#su{width:78px;height:28px;line-height:24px}#kw,#su{vertical-align:middle}#lk{margin:33px 0}#lk span{font:14px "宋体"}#lm{height:60px}#lh{margin:16px 0 5px;font:12px "宋体"}#lh a{font:12px arial}#mCon{position:absolute;right:7px;*top:9px;top:5px;cursor:pointer;padding:0 18px 0 0;background:url(http://www.baidu.com/img/arr.gif) no-repeat right center}#mCon span{color:#00c;cursor:default;display:block;padding-top:3px}#mCon .hw{text-decoration:underline;cursor:pointer}#mMenu{width:56px;border:1px solid #9a99ff;list-style:none;position:absolute;right:7px;top:28px;display:none;background:#fff}#mMenu a{width:100%;height:100%;display:block;line-height:22px;text-indent:6px;text-decoration:none}#mMenu a:hover{background:#d9e1f6}#mMenu .ln{height:1px;background:#ccf;overflow:hidden;margin:2px;font-size:1px;line-height:1px}#cp,#cp a{color:#77c}</style>
    PS,大家元旦快乐哈~~
      

  16.   


    源代码头的:<!doctype html>
    和源代码最后的:<!--d6896c28c03e0c49-->这类似的能够去掉就更好了。
    Style的去掉了:str.replaceAll("(?s)\\<style.*?\\</style\\>","")
      

  17.   


    String regex = "\\s*|(\r\n)";
    System.out.println(str.replaceAll(regex, ""));
      

  18.   

      专门注册一个来说一句   LZSB 
      

  19.   

    package org;import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class test2{
        public static void main(String[] args){
            String content = "<html>       " + "\n" +
                              "<head>      "  + "\n" + 
                              "<title></title>    " + "\n" +
                              "</head>    " + "\n" +
                               "<body onload='method();'> <table></table>   " + "\n" +  
                              "</body>   " + "\n" + 
                              "</html>";        String result = lostGaps(content);
            System.out.println(result);
        }    public static String lostGaps(String content){
            String regex = "(.+?>)\\s+\n?(<(.|\n)*)";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(content);
            //System.out.println(matcher.find());
            while(matcher.find()){
                //System.out.println("get here");
                content = matcher.group(1) + matcher.group(2);
                matcher = pattern.matcher(content);
            }
            return content;
        }
    }