关于字符串的一些操作
1、查询字符串中出现最多的字符和个数的算法。例如字符串“abaaas”出现最多的是a,出现4次,算法js描述
//第一种思路:借助json格式来实现 function getMore(str) { var result = {}; var num = 0; var value = ""; //将字符串以json格式存储到result中,并统计其个数 for (var i = 0; i < str.length; i++) { if (!result[str[i]]) {//判断json对象中有没有该属性,没有则添加 result[str[i]] = 1; } else {//若json中有该属性,则将其值+1 result[str[i]]++; } } //通过遍历result寻找出现次数最多的字符 for (var attr in result) {// if (num < result[attr]) { num = result[attr]; value = attr; } } return "出现最多的字符是:" + value + ",出现了" + num + "次."; } //第二种思路:对字符串先进行排序,然后再利用正则进行匹配,使用replace方法的回调函数 function getMore(str) { var arr = str.split(""); var num = 0, value = ""; arr.sort(); str = arr.join(""); var reg = /(\w)\1+/g;//\1代表与前面子项相同 str.replace(reg, function ($0, $1) { if (num < $0.length) { num = $0.length; value = $1; } }); return "出现最多的字符是:" + value + ",出现了" + num + "次."; }
2、将字符串转为千分制?例如将‘1234567’转为1,234,567
/思路:千分制每三位一组,所以先让字符串长度对3取余,余数不为0时,求前边一组然后再以此三位存到数组中 function thousandTransformer(str) { var r = str.length % 3; var prev = ""; var arr = []; var count = 0; var temp = ""; if (r != 0) {//余数不为0时,截取0到余数的字符串为数组第一项 prev = str.slice(0, r); arr.push(prev); } for (var i = r; i < str.length; i++) {//每三位进数组 count++; temp += str[i]; if (count % 3 === 0 && temp) { arr.push(temp); temp = ""; } } return arr.join(","); }
第二种思路:使用正则
function thousandTransformer(){ var reg=/(?=(?!\b)(\d{3})+$)/g;//?=前向声明只匹配位置;?!后向声明, return str.replace(reg,','); }
3、返回一个只包含数字类型的一个数组?例如“fhu123kkk456g”转换为[123,78,653];
//使用正则 function getNumberArray(str){ var reg=/\d+/g; return str.match(reg); }
普通字符串操作
function getNumberArray(str) { var temp = ""; var arr = []; for (var i = 0; i < str.length; i++) { if (str[i].charCodeAt() >= 48 && str[i].charCodeAt() <= 57) { temp += str[i]; } else { if (temp) { arr.push(temp); temp = ""; } } } return arr; }