如何擷取指定長度字串區分漢字和字元

admin發表於2017-02-11

擷取字串的操作在網頁中十分常見,比如在新聞列表中,往往需要將新聞標題的長度規定在一個恰當的範圍之內,這個時候就需要進行擷取字串的操作。實現方式有多重,比如可以使用String物件的substr()方法實現此功能,不過此方法有時候並不能滿足我們的需求,因為有些時候需要區分漢字還是英文字元,而一個英文字元佔據一個位元組,一個漢字佔據兩個位元組,所以要加以區分。下面就介紹一下如何實現次效果,程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<script type="text/javascript">
function cutString(str, len) {
  var strlen = 0;
  var restr = "";
  for (var i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) > 128) {
      strlen += 2;
    }
    else {
      strlen++;
    }
    restr += str.charAt(i);
    if (strlen >= len) {
      return restr;
    }
  }
  return restr;
}
var mystring = "hello,歡迎來到螞蟻部落"
var num = 10;
alert(cutString(mystring, num));
</script>
</head>
<body>
 
</body>
</html>

以上程式碼可以擷取指定長度的字串,並且能夠區分漢字和英文字元,下面就簡單介紹一下如何實現此效果:

一.實現原理:

通過字串的length屬性可以取得字串中字元的數目,它是不區分漢字和英文字元的,然後通過for迴圈來遍歷它們,並且通過charCodeAt()函式可以獲得相應索引值字元的ASCII碼值,因為英文字元的ASCII碼值最大為127,所以小128即是英文字元,大於128即是漢字,如果是漢字則strlen值加2,如果是英文字元則加1,並且將相應索引的字元新增到restr中,最後判斷strlen值是否已經大於等於指定長度,如果為真則返回restr,否則繼續進行for迴圈,如果直到for迴圈完成也沒有超過指定長度,那麼最後返回該字串。

二.程式碼註釋:

1.var strlen=0用於儲存每一次for迴圈後字串的長度。

2.var restr=""用於儲存每一次for迴圈後的字串。

3.for迴圈用來便利字串中的每一個字元,這裡的字元是不區分中英文的。

4.if(str.charCodeAt(i)>128)用判斷指定索引的字元是英文字元還是漢字,如果是漢字strlen加2,否則加1。

5.restr+=str.charAt(i);將指定索引的字元新增到restr。

6.if(strlen>=len)判斷是否已經超過指定長度,超過則返回restr,否則繼續執行for迴圈。

7.最後一個return rest:如果整個字串長度都沒有超過指定長度,那麼原樣返回。

相關文章