1.概述
1.1定义
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
'sdf'
"sdf"复制代码
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。如下所示,这两个都为合法的字符串
'key = "value"'
"It's a long journey"复制代码
1.2字符串与数组
字符串可以被视为字符数组(原形基于字符数组),因此可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始)。
var s="hellow world";
s[0];//"h"
s[1];//"e"
s[2];//"l"
"hellow world"[1]//"e"
复制代码
1.3 length属性
length
属性返回字符串的长度,该属性是无法改变的;
var s = 'hello';
s.length // 5
s.length = 3;
s.length // 5
s.length = 7;
s.length // 5复制代码
上面代码表示字符串的length
属性无法改变,但是不会报错。
2.字符串的基本处理函数
(1).charAt(位置) 获取字符串中的某一个字符
var str="hellow world";
var x=str.charAt(1);
console.log(x);//e
复制代码
charAt(位置) 的应用
(1)把字符串中的元素全部输出出来
var str="hellow world";
for(var n=0;n<str.length;n++){
console.log(str[n]);
}复制代码
(2)字符统计
<body>
<textarea name="" id="bt2" cols="30" rows="10"></textarea>
<input type="text" id="bt1">
<button id="bt0">计算</button>
<script>
var bt0=document.getElementById("bt0");
bt0.onclick=function(){
var bt1=document.getElementById("bt1");
var x=bt1.value;
var bt2=document.getElementById("bt2");
var text=bt2.value;
var sum=0;
for(var n=0;n<text.length;n++){
if (text.charAt(n)==x) {
sum++;
}
}
console.log(x+"出现次数为"+sum+"次");
}
</script>
</body>
复制代码
字符统计升级版:统计每个字符的出现次数,并且找到出现次数最多的字符,都在控制台输出;
<script>
// 拆分需求:
//1.含有多少个字符;
var str="adfhfuoidaaaa";
var arr=[];//定义一个空的数组,放置有多少个不同的字符
for(var n=0;n<str.length;n++){
if (arr.indexOf(str.charAt(n))==-1) {
arr.push(str.charAt(n));
}
}
console.log(arr);
// 2.统计每个字符出现的次数;
var sumarr=[];//定义一个空的数组,放置每个不同的字符出现的次数;
for(var n=0;n<arr.length;n++){//依次拿出不同的字符
var sum=0;
for(var j=0;j<str.length;j++){
if (str.charAt(j)==arr[n]) {
sum++;
}
}
sumarr.push(sum);//将每次的和(每个字符出现的次数)插入到指定的数组里;
console.log(arr[n]+"出现次数为"+sum);
}
// 3.进行比较,在控制台输出:谁的出现次数最多,有多少次;
var max=sumarr[0];
var index=0;
for(var i=1;i<sumarr.length;i++){
if (sumarr[i]>max) {
max=sumarr[i];
index=i;
}
}
console.log(arr);
console.log(sumarr);
console.log(arr[index]+"的出现次数最多"+",共计"+sumarr[index]+"次");
</script>
复制代码
(2). substr(m,n) 截取一段字符
两个参数m,n,表示从m位开始,向后边截取n位;如果只写一个参数m,会从这个参数后边全部截取;
var str="hellow world";
var x=str.substr(0,3);//hel
console.log(x.length);
复制代码
length用处: 截取任意一个字符串的后几位;
var str="oiarfesuauif ioweai ajdco3wei";
console.log(str.substr(length-3,3));//wei
复制代码
substr(m,n)应用::手机号码判断
<body>
手机号码:<input type="text" id="bt1">
<button id="bt0">注册</button>
<script>
var bt0=document.getElementById("bt0");
bt0.onclick=function(){
var bt1=document.getElementById("bt1");
var number=bt1.value;
if (number.length!==11) {
alert("手机号码必须为11位");
}else if (number.substr(0,3)!=="139") {
alert("必须为139开头");
}else if (number.substr(length-3,3)!=888) {
alert("后三位必须为888");
}else{
alert("注册成功");
}
}
</script>
</body>
复制代码
(3).concat()字符串合并;(了解)
var str1="hellow";
var str2="world";
console.log(str2.concat(str1));
复制代码
(4).charCodeAt(i) 获取字符串中第i个位置的字符unicode编码;(了解)
charCodeAt为驼峰命名
var str="hellow world";
console.log(str.charCodeAt(0));
复制代码
(5). substring(m,n) 和slice作用相同; 截取字符串 (了解)
截取字符串(两个参数m,n, 从第m位截取到第n位,并且不包括第n位)
var str="hellow world";
console.log(str.substring(1,3));//"el"
复制代码
(6).split("") 通过字符串中指定的字符,将其分割成数组; (重要)
var str="html,css,javascript,html5,css3";
var x=str.split(",");
console.log(x);复制代码
应用:书名分割
<body>
<textarea name="" id="bt1" cols="30" rows="10"></textarea>
<button id="bt0">分割</button>
<ul id="nav">
<li>书名</li>
</ul>
<script>
//需求:将不同的书名提取出来,然后连接成li,放入ul里,
//由于字符串提取太麻烦,可以根据逗号(,)把其转化为数组;
//书名:html,css,javascript,html5,css3;
var bt0=document.getElementById("bt0");
bt0.onclick=function(){
var bt1=document.getElementById("bt1");
var text=bt1.value;
// console.log(text);
var arr=text.split(","); //转化成数组,是为了提取方便;
// console.log(arr);
var str="";
for(var n=0;n<arr.length;n++){
str+="<li>"+arr[n]+"</li>";
}
var nav=document.getElementById("nav");
nav.innerHTML=str;
}
</script>
</body>
复制代码
split() 应用升级版
知字符串:“小明:87;小花:81;小红:97;小天:76;小张:74;小小:94;小西:90;小伍:76;小迪:64;小曼:76”;求所有同学的平均成绩并保留2位小数
var str="小明:87;小花:81;小红:97;小天:76;小张:74;小小:94;小西:90;小伍:76;小迪:64;小曼:76";
var studentarr=str.split(";");
console.log(studentarr);
var sum=0;
for(var n=0;n<studentarr.length;n++){
var student=studentarr[n].split(":");
//通过冒号,将姓名和成绩再次分割成数组,那么成绩就自动放在了数组的第二位,做一个求和
sum+=parseInt(student[1]);
var average=sum/(n+1);
}
console.log(average);
复制代码
(7).slice() 和数组中的用法相同
(8).indexOf() 和 .lastIndexOf() 和数组中的用法相同
(9)toUpperCase()全部转化为大写 toLowerCase全部转化为小写
var str="hellow world";
var x=str.toUpperCase();//转换后原字符串不变;
var x=str.toLowerCase();
console.log(typeof(x));//string
复制代码
(10).replcce("m","n") 替换指定的字符串
两个参数 ,m:想要替换的字符 n:替换成什么字符;只能替换第一个
var str="hellow world hellow";
var x=str.replace("hellow","你好");//只能替换第一个
console.log(x); //"你好 world hellow"
console.log(str);// 替换后原字符串不变
复制代码
实例1:一个(或多个)敏感字符的替换;
一个敏感字符的替换
<body>
<textarea name="" id="bt1" cols="30" rows="10"></textarea>
<button id="bt0">替换</button>
<script>
//需求:如果字符中含有tmd,将其替换成***
var bt0=document.getElementById("bt0");
bt0.onclick=function(){
var bt1=document.getElementById("bt1");
var text=bt1.value;
for(var n=0;n<text.length;n++){
text=text.replace("tmd","***");//做一个累加的替换
// var x=text.replace("tmd","***")
}
bt1.value=text;
}
</script>
复制代码
多个敏感字符的替换
<body>
<!-- 需求:当字符中含有TMD,tmd,法轮大法好等敏感字是,替换为*** -->
<textarea name="" id="bt1" cols="30" rows="10"></textarea>
<button id="bt0">替换</button>
<script>
var bt0=document.getElementById("bt0");
var arr=["TMD","tmd","法轮大法好"];
bt0.onclick=function(){
var bt1=document.getElementById("bt1");
var text=bt1.value;
for(n=0;n<arr.length;n++){
for(j=0;j<text.length;j++){
text=text.replace(arr[n],"***");//做一个累加的替换
}
}
bt1.value=text;
}
</script>复制代码
实例2:将下边两个字符串拼接成["A1", "A2", "A", "B1", "B2", "B", "C1", "C2", "C", "D1", "D2", "D"]
var arr1=['A', 'B', 'C', 'D'];var arr2=['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];for(var n=0;n<arr1.length;n++){ arr1[n]+="3"}var x=arr1.concat(arr2);x.sort();function fn(num){ var result = num.replace(/3/g, ""); return result}console.log(x.map(fn))复制代码