js数组和字符串方法(2)—查找类__常用字符串方法

js数组和字符串方法(2)—查找类__常用字符串方法

charAt(index)

概述

charAt() 方法从一个字符串中返回指定的字符。

参数

index

一个介于0 和字符串长度减1之间的整数。 (0~length-1)

如果没有提供索引,charAt() 将使用0。

描述

字符串中的字符从左向右索引,第一个字符的索引值为 0,最后一个字符(假设该字符位于字符串 stringName 中)的索引值为 stringName.length - 1。 如果指定的 index 值超出了该范围,则返回一个空字符串。

实例及注意事项

        var str = 'abcdefg';
        console.log(str[1]);
        console.log(str.charAt(2));

image-20200624145747363

注意:通过str[index] 这样的方式取值,是有兼容问题的,IE8以下是无法使用的

        var str = 'abcdefg';
        console.log(str.charAt())
        console.log(str.charAt(str.length+2));
        console.log(str.charAt(-5));

image-20200624150210018

输出字符串中不同位置的字符

下例输出字符串 “Brave new world” 不同位置处的字符:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var anyString = "Brave new world";

    console.log("The character at index 0   is '" + anyString.charAt(0)   + "'");
    console.log("The character at index 1   is '" + anyString.charAt(1)   + "'");
    console.log("The character at index 2   is '" + anyString.charAt(2)   + "'");
    console.log("The character at index 3   is '" + anyString.charAt(3)   + "'");
    console.log("The character at index 4   is '" + anyString.charAt(4)   + "'");
    console.log("The character at index 999 is '" + anyString.charAt(999) + "'");
</script>
</body>
</html>

image-20200624151304247

charCodeAt(index)

charCodeAt() 方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元 (在 Unicode 编码单元表示一个单一的 UTF-16 编码单元的情况下,UTF-16 编码单元匹配 Unicode 编码单元。但在——例如 Unicode 编码单元 > 0x10000 的这种——不能被一个 UTF-16 编码单元单独表示的情况下,只能匹配 Unicode 代理对的第一个编码单元) 。如果你想要整个代码点的值,使用 codePointAt()

简单而言:用于获取当前字符串的unicode编码

const sentence = 'The quick brown fox jumps over the lazy dog.';

const index = 4;

console.log(`The character code ${sentence.charCodeAt(index)} is equal to ${sentence.charAt(index)}`);
// expected output: "The character code 113 is equal to q"

> “The character code 113 is equal to q”

参数

index : 一个大于等于 0,小于字符串长度的整数。如果不是一个数值,则默认为 0。

返回值

返回值是一表示给定索引处(String中index索引处)字符的 UTF-16 代码单元值的数字;如果索引超出范围,则返回 NaN

描述

Unicode 编码单元(code points)的范围从 0 到 1,114,111(0x10FFFF)。开头的 128 个 Unicode 编码单元和 ASCII 字符编码一样。关于 Unicode 的更多信息,可查看 JavaScript Guide

如果指定的 index 小于 0 或不小于字符串的长度,则 charCodeAt 返回 NaN

实例及注意事项

针对字符串比较,实际比较大小是ASCII编码

image-20200624153126602

    var str = "kkkkkk";// k - 107
    var str2 = "v"; //v - 118
    
    console.log(str > str2);

image-20200624153016695

除此之外还可以比较中文:

实际上如果比较字符串,比较的是Unicode编码的大小

var china1 = "中";
var china2 = "文中";
console.log(china1 > china2);
console.log(china1.charCodeAt());
console.log(china2.charCodeAt());//20013   25991

console.log(china2.charCodeAt(-10));

image-20200624153405834

fromCharCode

静态 String.fromCharCode() 方法返回由指定的UTF-16代码单元序列创建的字符串。

console.log(String.fromCharCode(189, 43, 190, 61));
// expected output: "½+¾="

> “½+¾=”

参数

num1, ..., numN : 一系列UTF-16代码单元的数字。 范围介于0到65535(0xFFFF)之间。 大于0xFFFF的数字将被截断。 不进行有效性检查。

返回值

一个长度为N的字符串,由N个指定的UTF-16代码单元组成

描述

该方法返回一个字符串,而不是一个 String 对象。

由于 fromCharCode()String 的静态方法,所以应该像这样使用:String.fromCharCode(),而不是作为你创建的 String 对象的方法

实例及注意事项

    var str="我爱你";
    var arr = []
    for(var i=0;i<str.length;i++){
        // console.log(str.charCodeAt(i));
        arr[i] = str.charCodeAt(i);
    }
    console.log(arr);
    console.log(String.fromCharCode(arr[0], arr[1], arr[2]));
    console.log(String.fromCharCode(arr[1]));
    console.log(String.fromCharCode(arr[2]));

image-20200624154450634

indexOf

indexOf() 方法返回调用它的 String 对象中第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1。

const paragraph = 'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?';

const searchTerm = 'dog';
const indexOfFirst = paragraph.indexOf(searchTerm);

console.log(`The index of the first "${searchTerm}" from the beginning is ${indexOfFirst}`);
// expected output: "The index of the first "dog" from the beginning is 40"

console.log(`The index of the 2nd "${searchTerm}" is ${paragraph.indexOf(searchTerm, (indexOfFirst + 1))}`);
// expected output: "The index of the 2nd "dog" is 52"

> “The index of the first “dog” from the beginning is 40”

> “The index of the 2nd “dog” is 52”

语法

str.indexOf(searchValue [, fromIndex])

参数

searchValue

要被查找的字符串值。

如果没有提供确切地提供字符串,searchValue 会被强制设置为 "undefined", 然后在当前字符串中查找这个值。

举个例子:'undefined'.indexOf() 将会返回0,因为 undefined 在位置0处被找到,但是 'undefine'.indexOf() 将会返回 -1 ,因为字符串 'undefined' 未被找到。

fromIndex 可选

数字表示开始查找的位置。可以是任意整数,默认值为 0

如果 fromIndex 的值小于 0,或者大于 str.length ,那么查找分别从 0str.length 开始。(注: fromIndex 的值小于 0,等同于为空情况; fromIndex 的值大于 str.length ,那么结果会直接返回 -1

举个例子,'hello world'.indexOf('o', -5) 返回 4 ,因为它是从位置0处开始查找,然后 o 在位置4处被找到。另一方面,'hello world'.indexOf('o', 11) (或 fromIndex 填入任何大于11的值)将会返回 -1 ,因为开始查找的位置11处,已经是这个字符串的结尾了。

返回值

查找的字符串 searchValue 的第一次出现的索引,如果没有找到,则返回 -1

若被查找的字符串 searchValue 是一个空字符串,将会产生“奇怪”的结果。如果 fromIndex 值为空,或者 fromIndex 值小于被查找的字符串的长度,返回值和以下的 fromIndex 值一样:

'hello world'.indexOf('') // 返回 0
'hello world'.indexOf('', 0) // 返回 0
'hello world'.indexOf('', 3) // 返回 3
'hello world'.indexOf('', 8) // 返回 8

另外,如果 fromIndex 值大于等于字符串的长度,将会直接返回字符串的长度(str.length):

'hello world'.indexOf('', 11) // 返回 11
'hello world'.indexOf('', 13) // 返回 11
'hello world'.indexOf('', 22) // 返回 11

从前面一个例子可以看出,被查找的值是空值时,Javascript将直接返回指定的索引值。从后面一个例子可以看出,被查找的值是空值时,Javascript将直接返回字符串的长度。

描述值

字符串中的字符被从左向右索引。第一个字符的索引(index)是 0,变量名为 stringName 的字符串的最后一个字符的索引是 stringName.length - 1

"Blue Whale".indexOf("Blue")       // 返回 0
"Blue Whale".indexOf("Blute")      // 返回 -1
"Blue Whale".indexOf("Whale", 0)   // 返回 5
"Blue Whale".indexOf("Whale", 5)   // 返回 5
"Blue Whale".indexOf("", -1)       // 返回 0
"Blue Whale".indexOf("", 9)        // 返回 9
"Blue Whale".indexOf("", 10)       // 返回 10
"Blue Whale".indexOf("", 11)       // 返回 10

indexOf 方法是区分大小写的。例如,下面的表达式将返回 -1

"Blue Whale".indexOf("blue")      // 返回 -1

检测是否存在某字符串

注意 0 并不会被当成 true-1 不会被当成 false 。所以当检测某个字符串是否存在于另一个字符串中时,可使用下面的方法:

'Blue Whale'.indexOf('Blue') !== -1    // true
'Blue Whale'.indexOf('Bloe') !== -1    // false
~('Blue Whale'.indexOf('Bloe'))        // 0, 这是一种错误用法

实例及注意事项

      var str = "aabbccddeeffggabcdefg";

        console.log(str.indexOf('b'));
        console.log(str.indexOf('ff'));
        console.log(str.indexOf('f',14));//19
        console.log(str.indexOf('a', -1));
        console.log(str.indexOf('k', 50));

image-20200624161946498

使用indexOf()lastIndexOf()

下例使用 indexOf()lastIndexOf() 方法定位字符串中 “Brave new world” 的值。

var anyString = "Brave new world";

console.log("The index of the first w from the beginning is " + anyString.indexOf("w"));
// logs 8
console.log("The index of the first w from the end is " + anyString.lastIndexOf("w")); 
// logs 10

console.log("The index of 'new' from the beginning is " + anyString.indexOf("new"));   
// logs 6
console.log("The index of 'new' from the end is " + anyString.lastIndexOf("new"));
// logs 6
indexOf 和区分大小写

下例定义了两个字符串变量。两个变量包含相同的字符串,除了第二个字符串中的某些字符为大写。第一个 log 方法输出 19。但是由于 indexOf 方法区分大小写,因此不会在 myCapString 中发现字符串 “cheddar",所以,第二个 log 方法会输出 -1。

var myString    = "brie, pepper jack, cheddar";
var myCapString = "Brie, Pepper Jack, Cheddar";

console.log('myString.indexOf("cheddar") is ' + myString.indexOf("cheddar"));    
// logs 19
console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf("cheddar")); 
// logs -1
使用 indexOf 统计一个字符串中某个字母出现的次数

在下例中,设置了 count 来记录字母 e 在字符串 str 中出现的次数:

// 翻译:生存还是毁灭?这是个问题。(莎士比亚《哈姆雷特》)
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');

while (pos !== -1) {
  count++;
  pos = str.indexOf('e', pos + 1);
}

console.log(count); // displays 4

lastIndexOf

lastIndexOf() 方法返回调用String 对象的指定值最后一次出现的索引,在一个字符串中的指定位置 fromIndex处从后向前搜索。如果没找到这个特定值则返回-1 。

该方法将从尾到头地检索字符串 str,看它是否含有子串 searchValue。开始检索的位置在字符串的 fromIndex 处或字符串的结尾(没有指定 fromIndex 时)。如果找到一个 searchValue,则返回 searchValue 的第一个字符在 str 中的位置。str中的字符位置是从 0 开始的。

语法

str.lastIndexOf(searchValue[, fromIndex])

参数

searchValue

一个字符串,表示被查找的值。如果searchValue是空字符串,则返回fromIndex

fromIndex

待匹配字符串searchValue的开头一位字符从 str的第fromIndex位开始向左回向查找。fromIndex默认值是 str.length。如果 fromIndex >= str.length ,则会搜索整个字符串。如果 fromIndex < 0 ,则等同于 fromIndex == 0

返回值

返回指定值最后一次出现的索引(该索引仍是以从左至右0开始记数的),如果没找到则返回-1。

描述

字符串中的字符被从左向右索引。首字符的索引(index)是 0,最后一个字符的索引是 stringName.length - 1

'canal'.lastIndexOf('a');     // returns 3 (没有指明fromIndex则从末尾l处开始反向检索到的第一个a出现在l的后面,即index为3的位置)
'canal'.lastIndexOf('a', 2);  // returns 1(指明fromIndex为2则从n处反向向回检索到其后面就是a,即index为1的位置)
'canal'.lastIndexOf('a', 0);  // returns -1(指明fromIndex为0则从c处向左回向检索a发现没有,故返回-1)
'canal'.lastIndexOf('x');     // returns -1
'canal'.lastIndexOf('c', -5); // returns 0(指明fromIndex为-5则视同0,从c处向左回向查找发现自己就是,故返回0)
'canal'.lastIndexOf('c', 0);  // returns 0(指明fromIndex为0则从c处向左回向查找c发现自己就是,故返回自己的索引0)
'canal'.lastIndexOf('');      // returns 5
'canal'.lastIndexOf('', 2);   // returns 2

Note: 'abab'.lastIndexOf('ab', 2) 将返回 2 而不是 0, 因为fromIndex只限制待匹配字符串的开头。

(例如’abadefgabm’.lastIndexOf(‘ab’, 7) 返回7,虽然查找的’ab’中的b已经在 index=8的位置了从index=7的a处向左查找仍是能找到自身a加上其后连成ab,因为fromIndex指的是待匹配字符串的开头那一个)

区分大小写

lastIndexOf 方法区分大小写。例如,下面的表达式返回 -1:

"Blue Whale, Killer Whale".lastIndexOf("blue"); // returns -1

实例及注意事项

        var str= "kaichele";

        console.log(str.lastIndexOf("k", str.length));
        console.log(str.lastIndexOf("k", -50));
        console.log(str.lastIndexOf("vv"));

image-20200624172735942

使用 indexOflastIndexOf

下例使用 indexOflastIndexOf 方法来定位字符串 “Brave new world” 中的值。

var anyString = "Brave new world";

console.log("The index of the first w from the beginning is " + anyString.indexOf("w"));
// Displays 8
console.log("The index of the first w from the end is " + anyString.lastIndexOf("w")); 
// Displays 10

console.log("The index of 'new' from the beginning is " + anyString.indexOf("new"));   
// Displays 6
console.log("The index of 'new' from the end is " + anyString.lastIndexOf("new"));
// Displays 6


(后续待补充)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值