如我有文字
------------------
6月1日上午消息,                              15
DNS故障引发行业对暴风影音的热议,             32
也折射出中国软件发展的问题。                  27
----------------
如上面的文字。
算他的真实长度中文为占2   (15+32+27)
然后有多少条,             (3)
最长行有长度是多少          (32)
以上的数据只是自己看算出来的,还没有算特殊的如换行符
那么用js如何最快的算出上面的数据呢谢谢

解决方案 »

  1.   

    <script>
    var halfChar = ",。";
    var arr = new Array();
    arr[0] = "6月1日上午消息,";
    arr[1] = "DNS故障引发行业对暴风影音的热议,";
    arr[2] = "也折射出中国软件发展的问题。";
    var len = 0;
    var max = 0;
    for(var i = 0; i < arr.length; i++) {
    var rMax = 0;
    for(var j = 0; j < arr[i].length; j++) {
    if(halfChar.indexOf(arr[i].charAt(j)) >= 0){
    len = len + 1;
    rMax = rMax + 1;
    }else if(arr[i].charCodeAt(j)>128){
    len = len + 2;
    rMax = rMax + 2;
    }else{
    len = len + 1;
    rMax = rMax + 1;
    }
    }
    if(rMax > max){
    max = rMax;
    }
    }
    alert("一共有"+arr.length+"条,长度:"+len+",最长:"+max);
    </script>
      

  2.   


    function counter(msg){
      msg = (msg || '').split('\n');
      var len1 = msg.length, len2 = 0 ,i = 0;
      for(; i < len1; i++){
        var l = msg[i].split('').length;
        if(l > len2) len2 = l;
      }
      alert('一共有' + len1 + '条消息,最长的消息有 + len2 + '个字符');
    }
      

  3.   

    修正 漏了'
    alert('一共有' + len1 + '条消息,最长的消息有' + len2 + '个字符');
      

  4.   

    简单处理:
    <textarea id="s" style="width:80%;height:60%;">
    如我有文字
    ------------------
    6月1日上午消息,                              15
    DNS故障引发行业对暴风影音的热议,            32
    也折射出中国软件发展的问题。                  27
    ----------------
    如上面的文字。
    算他的真实长度中文为占2  (15+32+27)
    然后有多少条,            (3)
    最长行有长度是多少          (32)
    以上的数据只是自己看算出来的,还没有算特殊的如换行符
    那么用js如何最快的算出上面的数据呢谢谢
    </textarea><script language="javascript">
    var ds = document.getElementById('s');
    var reportString = function(str){
        var ta = str.split(/[\r\n]/),iline = ta.length,imax = 0,itotal = 0,itmp = 0;
        while(ta.length){
            itmp = new String(ta.shift().replace(/[^\x00-\xff]/g,'**')).length;
            imax = Math.max(imax,itmp);
            itotal += itmp;
        }
        alert('该字符串共有 '+iline+' 行\n\n总计长度为 '+itotal+' \n\n最长行的长度为 '+imax);
    };reportString(ds.value);
    </script>
      

  5.   


    str = escape("汉字abc,,");
    len = 0;
    for(i=0;i<str.length;i++,len++) {
        if(str.charAt(i)=="%") {
            if(str.charAt(++i)=="u") {
                i += 3;
                len++;
            }
            i++;
        }
    }
    alert(len); str = "汉字abc,,";
    len = 0; 
    for(i=0;i<str.length;i++){ 
        iCode = str.charCodeAt(i);
        if((iCode>=0 && iCode<=255)||(iCode>=0xff61 && iCode<=0xff9f)){
            len += 1;
        }else{
            len += 2;
        }
    }
    alert(len);