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>
方法3:
<script>
var str = 'dsjkfhsdfjkoeskfsosdodss'
var newArr = str.split("");
var json = [];//创建一个对象
//遍历数组,判断对象中是否存在数组的值,如果存在值+1,不存在赋值为1
for(var i = 0 ; i < newArr.length ; i++) {
if (json[newArr[i]]) {
json[newArr[i]] += 1
} else {
json[newArr[i]] = 1
}
}
// 定义两个变量存储字符的值和次数
var num = 0;
var number = "";
for(var k in json) {
if(json[k] > num) {
num = json[k];
number = k;
}
}
console.log(number+"的出现次数最多,为"+num+"次")
</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:替换成什么字符;只能替换第一个
语法:stringObject . replace ( regexp / substr , replacement )
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))