字符串学习
<script>
// 字符串概述:
// 字符串也是一个数据结构(串),同样的内容串在一起。因为在对应的js里面字符串属于一个值类型(值类型是常量,常量是不能变的)。
// 字符串是不能改变的,结合昨天提到的数据结构里面串的也是一个存储结构,作为存储结构增删查改的方法(字符串增删查改不能针对本身 而是返回一个新的字符串
// 字符串声明:
// 1.值类型赋值
var str = "hello world"
// 2.以new关键词声明(引用了对应的值的地址)
var str = new String("abc")
// ES6新增 字符串模板
var a = 'jack'
var str = `hello string${a}`//esc下面这个键 解析¥{} 以变量来解析
console.log(str);
// new String和String的区别
// new String是构建一个String对象(引用数据类型 有地址指向的)
// String单纯的将对应的传入的参数转为String类型(值类型
// 字符串的属性
// length属性 返回字符串的长度(包含空格及换行)
var str = 'a b'
console.log(str.length);//3
// 通过下标来获取对应的字符串
var str = 'abc'
console.log(str[0]);//a
// 字符串的方法(返回新的字符串
// 通过下标找字符串(char字符
// charAt(下标)
var str = 'abc'
var char = str.charAt(0)//a
console.log(char);
// charCodeAt(ACSII码)
var str = 'abc'
var code = str.charCodeAt(0)//97
console.log(code);
// 通过字符串找下标
// 1.indexOf
var str = 'abc'
console.log(str.indexOf('a'));//找得到返回0,找不到返回-1
console.log(str.indexOf('d'));//找得到返回0,找不到返回-1
// 可以有两个参数 第一个参数为 对应需要查询的字符串 第二个为开始查找的位置
console.log(str.indexOf('b',2));// -1 //从下标2开始找,找到第一个出现b的位置
var str = 'abbbccde'
console.log(str.indexOf('b',2));// 2 //从2开始找,找第一个出现2的位置
// 这个方法可以省略第二个参数 省略其实就是默认这个值为0
// 2.lastIndexOf
console.log(str.lastIndexOf('b'));//3
console.log(str.lastIndexOf('b',0));//-1
console.log(str.lastIndexOf('b',4));//3
//实现以下对应的indexOf方法
var searchStr = 'abcdefabcde'
function indexOf(str,index){
if(!index){//当前如果是undefined的值
index = 0;//默认为0
}
// 得到str的长度
var len = str.length
//当前的字符串的总长度
for(var i=index;i<searchStr.length-len;i++){
var s = ''
for(var j=0;j<len;j++){
s+=searchStr[i+j]
}
if(s==str){
return i
}
}
return -1
}
console.log(indexOf('bc',4));
//实现以下对应的lastIndexOf方法
var searchStr = 'abcdefabcde'
function lastIndexOf(str,index){
if(!index && index !=0){
index = searchStr.length-length
}
var len = str.length
for(var i =index;i>=length-1;i--){
var s = ''
for(var j=0;j<len;j++){
s+=searchStr[i-j]
}
if(s==str){
return i
}
}
return -1
}
console.log(lastIndexOf('e'));//10
console.log(lastIndexOf('e',9));//4
//3.search方法(和indexOf一样 支持正则表达式
var str = 'abc'
console.log(str.search(/ab/)); // /ab/正则表达式
console.log(str.search(/ab/,0)); // /ab/正则表达式
//静态方法(通过构造方式名直接调用的叫做静态方法 他是对应的static修饰的
// fromCharCode 将对应的ASCII码转为字符串
var str = String.fromCharCode(97)
console.log(str);//a
// concat 将多个字符串转为连接为一个字符串返回
var str = 'hello'.concat('world')
console.log(str);//helloworld
// 支持正则的方法(4个)
// 1.search查找 找到返回下标,没找到返回-1
// 2.replace 替换 (将找到的字符串替换成一个新的字符串)
var str = 'abca'
var str1 = str.replace('a','hello')//将a替换成hello 只替换第一个
console.log(str1);
// 3.分割(返回数组) 成为一个数组 split方法 数组变成字符串 join方法 (默认以,
var str = '1,2,3'
// 默认不是以,作为分割 默认不分割 直接填入到数组
console.log(str.split());//"1,2,3"
console.log(str.split(','));//(3) ['1', '2', '3']
// 4.match匹配(返回数组) 返回一个数组 (匹配的内容
var str = "abcacc"
// 默认只找第一个匹配的 加入到数组
var arr = str.match('a')
console.log(arr);
// 截取的方法 substring substr
//substring (开始的下标,结束的下标)不包含结束的下标
var str = 'abcdef'
console.log(str.substring(1));//bcdef
console.log(str.substring(1,3));//bc 截取不包含最后一个下标 (默认不填str.length
//substr(开始的下标,截取的个数)
console.log(str.substr(1));//bcdef
console.log(str.substr(1,3));//bcd 从下标一开始,截取的个数为3
//转大写 toUpperCase
//转小写 totoLowerCase
var str = 'abcAcD'
console.log(str.toUpperCase());
console.log(str.toLowerCase());
</script>
练习-1
<script>
// 1, 已知有两个字符串str1 = ‘hello’ , str2 = ‘world’,将两个字符串组成一个;
var str1 = 'hello'
var str2 = 'world'
console.log(str1.concat(str2))
// 2, 已知字符串str = “I love BeiJing”,找出love的范围 indexOf(tmp) tmp=”love”
function findIndexRange(str,content){
var start = str.indexOf(content)
return [start,start+content.length]
}
console.log( findIndexRange('I love BeiJing','love'));
// 3, 已知字符串str = “I hate BeiJing!”,提取第3个字符到第5个字符
var str = 'I hate BeiJing!'
console.log(str.substring(2,5))
// 4, 将字符串str = “When I was young, I love a girl in neighbor class.”中,从young提取到girl。但是不许数 young, I love a girl
var str = 'When I was young, I love a girl in neighbor class.'
var start = str.indexOf('young')
var end = str.indexOf('girl')+'girl'.length
console.log(str.substring(start,end));
</script>
练习-2:
<script>
// 1, 去掉字符串123@zh@qq.com中的@;
var str = '123@zh@qq.com'
console.log(str.replace(/@/g,''));
// 2, 任意给定的一串字符,统计字符串里面的大写字母和小写字母的个数
//通过ascii码进行比较 大写 65->90 小写 97->122
//遍历比对
var str = new String('abcsDf')
var lowCount = 0
var uppCount = 0
for(var index in str){
if(str[index]>='A' && str[index]<='Z'){
uppCount++
}else if(str[index]>='a' && str[index]<='z'){
lowCount++
}
}
console.log(lowCount,uppCount)
// 3, https://www.baidu.com/s?name=avery&age=20&sex=male , 取出name, age和sex的值 (split)
//重点 提取对应的url地址的参数
//对象 key:value 前面的作为key 后面的作为value
function getUrlParams(url){
var params = {}
//先截取 传参内容和地址内容 ['https://www.baidu.com/s','name=avery&age=20&sex=male']
var paramsStr = url.split('?')[1] //name=avery&age=20&sex=male
//截取传参内容的每个参数['name=avery','age=20','sex=male']
var paramArr = paramsStr.split('&')
//遍历每个对应的参数
for(var param of paramArr){//param name=avery
var arr = param.split('=') //[name,avery]
params[arr[0]] = arr[1]
}
return params
}
var params = getUrlParams('https://www.baidu.com/s?name=avery&age=20&sex=male')
console.log(params['name']);
console.log(params['age']);
console.log(params['sex']);
</script>