前不久去阿里的在線筆試,最後一道題可算是難倒了我,題目大概是這樣的:用原生的js實現字符串中的英文字母字符和漢字的識別,漢字按照兩個單位計算,英文和字符按照一個單位計算,乍一想真不知道有什麼好辦法,以前寫c代碼太多,就用c代碼對ascii的辦法來,筆試結束字符才知道,js是很高大上的玩意兒,這招行不通。在這裏我介紹一種很簡單很靠譜的方法,用unicode字符集的辦法來解決。
首先腦補一下小知識:unicode字符集數字0 - 128是英文字母字符(半角)的範疇,在這以外是其他字符(全角),用js字符串的charCodeAt()可以返回處理後的字符Unicode碼。
下邊是我設計的函數方法
function strChange(str,n){ //str是要傳入處理的字符串,n是需要返回字符串的長度 var myStr = null; //新建字符串,用於保存要返回的那一段字符串 var k = 0; for(var i=0;i<str.length;i++){ if(str.charCodeAt(i)>=0&&str.charCodeAt(i)<128){ //charCodeAt(i)可以返回字符處理後的Unicode碼長 if(k==n) break; //如果夠數了,就跳出循環 myStr=myStr+str.charAt(i); //把字符存入要返回的字符串中 k+=1; } else{ if(k==n) break; myStr=myStr+str.charAt(i); k+=2; } } return myStr; //返回截取的字符串 }