5-字符串

2023-05-16

1 字符串基础

1.1 定义字符串

  • 通过String构造函数构造的字符串与字符串直接量的类型不同。前者为引用对象,后者为值类型的字符串。

    var s1=new String('1'); //构造字符串
    var s2='2'; //定义字符串直接量
    console.log(typeof s1); //object
    console.log(typeof s2); //string
    
  • String() 也可以作为普通函数使用,把参数转换为字符串类型的值返回。

  • String() 可以带多个参数,但它仅处理第一个参数,并把它转换为字符串返回。

  • fromCharCode(),是string类提供的静态方法(即定义在对象本身,而不是定义在对象实例的方法)。参数为一系列Unicode编码,返回对应的字符串。

    var a=[35835,32773,24744,22909],b=[];
    for(var i in a){
        b.push(String.fromCharCode(a[i]));
    }
    console.log(b.join(''));//返回字符串‘读者您好’
    

1.2 字符串与数组

  • 字符串被视为字符数组,可使用数组的中括号运算符来返回某个位置的字符(从0开始)

    var s='hello';
    console.log(s[0]);//h
    var a='hello'[1];
    console.log(a);//e
    var b='hello'[5];//超过数组长度
    console.log(b);//undefined
    'abc'[x];//undefined
    

    字符串和数组只是相似,无法改变字符串中的单个字符。

  • 字符串也无法直接使用数组的方法,必须通过call()方法间接使用

    var s='hello';
    console.log(s);
    //s.join(''); 不能直接使用数组方法,必须通过call()方法间接使用
    var a=Array.prototype.join.call(s,' ');
    console.log(a);
    

1.3 字符串长度

length 属性返回字符串的长度,该属性只读,无法修改。

1.4 字符集

JavaScript使用Unicode字符集,允许在程序中直接使用Unicode编码表示字符,即将字符写成 \uxxxx 的形式,其中 xxxx 代表该字符的Unicode编码。例如,\u00A9代表版权符号。

var s='\u00A9'
console.log(s);//©

1.5 Base64转码

Base64是一种编码方法,可以将任意字符转成可打印字符。

JavaScript提供两个Base64相关方法:

  • btoa():字符串或二进制值转为Base64编码
  • atob():Base64编码转为原来的编码

上两个方法不适合非ASCII码的字符,会报错。


2 使用String

2.1 字符串的表示和值

  • toString()——返回字符串的表示
  • valueOf()——返回字符串的值

2.2 连接字符串

最简单的方法:使用加号运算符

使用 concat() 方法,返回一个新的字符串,不改变原来的字符串

  • 该方法可接受多个参数
  • 若参数不是字符串,该方法会先将其转为字符串,再连接

2.3 获取指定位置字符

1.charAt()

  • 返回指定位置的字符(从0开始)
  • 这个方法完全可以用数组下标替代
  • 参数为负数或大于字符串长度,返回空字符串

2.charCodeAt()

  • 返回给定位置字符的 Unicode 编码(十进制表示)

  • 若无参数,返回首字母的 Unicode 编码

    console.log('abc'.charCodeAt(1));//98
    
  • charCodeAt() 方法返回的 Unicode 编码不大于65536(0xFFFF),即只返回两个字节的字符的编码。若遇到 Unicode 编码大于65536的字符,需连续使用两次 charCodeAt(),不仅读入 charCodeAt(i),还要读入 charCodeAt(i+1),将两个16字节放在一起,才能得到准确字符。

2.4 获取字符的位置

  • indexOf()——从字符串头部开始匹配,返回字符串的位置
  • lastIndexOf()——从字符串尾部开始匹配,返回字符串位置

它们都还可以接受第二个参数,对于 indexOf() 方法,第二个参数表示从该位置向后匹配,对于 lastIndexOf() 方法,则表示从该位置起向前匹配。

console.log('helloworld'.indexOf('o',7));//-1
console.log('helloworld'.lastIndexOf('o',5));//4

对于indexOf() 方法的第二个参数:

  • 若值为负数,则视为0,相当于从字符串第一个字符开始查找
  • 若省略这个参数,也将从字符串第一个字符开始查找
  • 若值大于等于length属性,视为当前字符串中没有指定的子字符串,返回-1

【补充】 leetcode 763. 划分字母区间:(10.22打卡)

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
示例:
输入:S = “ababcbacadefegdehijhklij”
输出:[9,7,8]
解释:
划分结果为 “ababcbaca”, “defegde”, “hijhklij”。
每个字母最多出现在一个片段中。
像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。

var partitionLabels = function(S) {
    var ret=[];//定义输出数组,用于存放分段后的字符串的长度
    function fenduan(start,s,last){//start、last双指针
        while(last<S.length&&start<S.length){
            s=S[start];//最开始的字符
            last=S.lastIndexOf(s);//最后一次出现s的位置
            for(let i=start+1;i<last;i++){//在指针区间遍历
                                       //确保last指针前的字母不在后面出现
                last=last>S.lastIndexOf(S[i])?last:S.lastIndexOf(S[i]);
            }
            ret.push(S.slice(start,last+1).length);//slice截取字符串
                                           //length返回长度存入输出数组
            start=last+1; //完成一个分段,继续下一个
        }
    }   
    fenduan(0,S[0],0);  
    return ret;
};

2.5 查找字符串

1.search()——查找参数字符串在调用字符串中第一次出现的位置

  • 参数为正则表达式(RegExp对象),若不是,JavaScript会使用RegExp()构造函数把它转换成RegExp对象

  • 从左到右查找,返回第一个匹配的子字符串的起始下标位置,若没有,返回-1

  • 无法查找指定范围,始终返回第一个匹配子字符串的下标位置

    var s='http://www.baidu.com';
    console.log(s.search('://'));//4
    console.log(s.search('\:'));//4
    console.log(s.search('//'));//5
    console.log(s.search('/w'));//6
    

2.match()——找出所有匹配的字符串,并存储在一个数组中返回

var s='http://www.baidu.com';
var a=s.match(/w/g);
console.log(a);//[ 'w', 'w', 'w' ]
  • match()方法返回的是一个数组,若不是全局匹配,则只能执行一次匹配
  • 若没有找到匹配字符,则返回null,而不是返回空数组
  • 不执行全局匹配时,若匹配模式包含子表达式,则返回的数组中包含子表达式匹配的信息

2.6 截取字符串

1.slice()——从原字符串取出子字符串并返回,不改变原字符串

  • 第一个参数是子字符串的开始位置,第二个参数为结束位置(不含该位置
  • 若省略第二个参数,则表示子字符串一直到原字符串结束
  • 若参数为负数,表示从结尾开始倒数计算的位置
  • 若第一个参数大于第二个参数,返回空字符串

2.substring()——从原字符串取出子字符串并返回,不改变原字符串

  • 与slice()作用相同,建议优先使用slice()

  • 第一个参数是子字符串的开始位置,第二个参数为结束位置(不含该位置

  • 若省略第二个参数,则表示子字符串一直到原字符串结束

  • 若第一个参数大于第二个参数,返回空字符串substring() 方法会自动更换两个参数的位置

  • 若参数为负数,substring() 方法会自动将负数转为0

    console.log('JavaScript'.substring(-3));//JavaScript
    console.log('JavaScript'.substring(4,-3));//Java  相当于(0,4)
    

3.substr()——从原字符串取出子字符串并返回,不改变原字符串

  • 第一个参数是子字符串的开始位置,第二个参数为子字符串的长度

  • 若省略第二个参数,则表示子字符串一直到原字符串结束

  • 若第一个参数为负数,表示倒数计算字符的位置,若第二个参数为负数,将被自动转为0,因此返回空字符串

    console.log('JavaScript'.substr(-6));//Script
    console.log('JavaScript'.substr(3,-1));//'' 空字符串
    

2.7 替换字符串

replace()——替换字符串

  • 第一个参数表示执行匹配的正则表达式(也可以传递字符串),第二个参数表示准备代替匹配的子字符串(也可以是替换函数

  • 在replace() 方法中约定了一个特殊的字符($),这个美元符号如果附加一个序号就表示对正则表达式中匹配的子表达式存储的字符串引用

    console.log('JavaScript'.replace(/(Java)(Script)/,'$2-$1'));
    //返回 Script-Java
    

    特殊字符:
    $&——与正则表达式相匹配的子字符串
    $`——位于匹配子字符串左侧的文本
    $’——位于匹配子字符串右侧的文本
    $ — — 表 示 ——表示 符号

    console.log('JavaScript'.replace(/Script/,'$&'));//JavaScript
    

2.8 大小写转换

  • toLocaleLowerCase()——转换成小写
  • toLocaleUpperCase()——转换成大写
  • toLowerCase()——转成小写
  • toUpperCase()——转成大写

2.9 比较字符串

JavaScript在比较字符串大小时,根据字符的Unicode编码大小,逐位进行比较

2.10 转换为数组

split() 方法——根据指定的分隔符把字符串分解为数组,数组中不包含分隔符

  • 参数为空字符串,则按单个字符分切

  • 参数为空,则将整个字符串作为一个元素的数组返回

  • 参数为正则表达式,则将以匹配文本作为分隔符进行切分

  • 若正则表达式匹配的文字位于字符串的边沿,则split() 方法也执行分割操作,为数组添加一个空元素

  • 支持第二个参数,该参数是可选的整数,用来指定返回数组的最大长度

  • 若想使返回的数组包括分隔符或分隔符的一个或多个部分,可以使用带子表达式的正则表达式来实现

    console.log('aa2bb3cc4dd5e678f12'.split(/(\d)/));
    //使用小括号包含数字分隔符
    /*[
      'aa', '2',  'bb', '3', 'cc',
      '4',  'dd', '5',  'e', '6',
      '',   '7',  '',   '8', 'f',
      '1',  '',   '2',  ''
    ]*/
    

2.11 修剪字符串

trim() 方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串

  • 该方法去除的不仅是空格,还包括制表符(\t、\v)、换行符(\n)和回车符(\r)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5-字符串 的相关文章

  • win10远程计算机

    确保被控制电脑远程功能开启 控制面板 61 61 gt 允许远程访问 选中允许远程连接到此计算机 查看被控制电脑的用户名和ip 命令行 query user xff0c 下面的用户名为远程登录的用户名 密码为改账户的登录密码 xff08 不
  • 【剑指offer】对称的二叉树

    递归法 通过两个指针同时递归遍历左右两个子树 xff0c 判断当前遍历到的两个节点是否相等 如下图 xff0c 需要注意的是 xff0c 左右子树的遍历不是完全一样 xff0c 左子树采用左右遍历 xff0c 右子树采用右左遍历 xff0c
  • 【剑指offer】判断是不是平衡二叉树

    这题只需要在求二叉树深度的基础上扩展一下即可 xff0c 下面为求二叉树深度的代码 span class token keyword public span span class token class name HashMap span
  • Linux查看硬盘属性(机械硬盘/固态硬盘)

    通过命令lsblk d o name rota查看 xff0c 0表示固态硬盘 xff0c 1表示机械硬盘 xff0c sda为机械硬盘 xff0c sdb为固态硬盘
  • python计算众数scipy

    计算如下数组中每一行的众数 xff0c 期望结果 xff0c 第一行为1 xff0c 第二行为3 0 0 1 1 1 2 3 3 2 3 使用scipy 的统计包stats中的mode函数 xff0c 指定第二个维度 xff0c 返回元组
  • 【剑指offer】序列化二叉树

    解题思路 序列化时 xff0c 可以通过各种遍历方法 xff0c 例如层序遍历 递归遍历对二叉树进行遍历 xff0c 遍历过程中将每个节点的值拼接到字符串中 xff0c 注意每个节点之间用一个标识符隔开 xff0c 例如 xff0c 这是为
  • Linux cuda11.1安装torch_scatter,torch-sparse,torch-cluster,torch-spline-conv,torch-geometric

    创建虚拟环境 conda create n torch18 span class token assign left variable python span span class token operator 61 span span c
  • pytorch查看张量占用内存大小

    element size返回单个元素的字节大小 xff0c nelement返回元素个数 span class token keyword import span torch a span class token operator 61 s
  • MySQL8.0 集群安装 (K8S)

    尝试了很多版本的mysql镜像 xff0c 都存在这样那样的的问题 原始需求中 xff0c 需要同时支持x86 64 AMD64 和aarch64 ARM64V8 xff0c 最后找到Oracle官方出品的MySQL Server 8 0镜
  • 使用latex导出IEEE文献格式

    创建一个tex文件 xff0c 内容如下 documentclass span class token punctuation span a4paper span class token punctuation span 10pt span
  • IDEA中设置python解释器(不同虚拟环境)

    按住Ctrl 43 Shift 43 Alt 43 s xff0c 或 File gt Project Structure xff0c 在Module SDK处下拉找到对应的python解释器 xff0c 如果第一次添加python解释器
  • TF-IDF

    TF IDF xff08 term frequency inverse document frequency xff09 是一种用于信息检索与数据挖掘的常用加权技术 TF意思是词频 Term Frequency xff0c IDF意思是逆文
  • 第一次写博客-C/C++软件开发工程师需要学习哪些东西?

    学习路线概述 概述数据结构和算法操作系统计算机网络数据库设计模式 概述 作为一名本科机械电子 xff0c 研究生研究计算机视觉方向的211应届毕业生 xff0c 如何才能从事C C 43 43 软件开发类的工程师呢 xff1f 如果能有机会
  • Vue中使用v-for不能用index作为key值

    今天在改一个项目 xff0c 有一个 lt el tabs gt 的列表循环 xff0c 需要根据权限控制列表项的显示 xff0c 代码如下 xff1a span class token operator lt span template
  • java 冒泡排序 选择排序 插入排序及其异同点

    交换两坐标位置的swap 函数 之后要用到 span class token keyword public span span class token keyword static span span class token keyword
  • 自抗扰(ADRC)控制原理及控制器设计

    自抗扰控制是在PID控制算法基础上进行改进的新型控制方法 xff0c 它具有不依赖于控制对象模型 不区分系统内外扰的结构特点 常用的自抗扰控制器主要由跟踪微分器 xff08 Tracking Differentiator xff0c TD
  • LQR控制基本原理(包括Riccati方程具体推导过程)

    全状态反馈控制系统 状态反馈控制器 通过选择K xff0c 可以改变的特征值 xff0c 进而控制系统表现 LQR控制器 最优控制 xff0c 其本质就是让系统以某种最小的代价来让系统运行 xff0c 当这个代价被定义为二次泛函 xff0c
  • 运行VINS-Fusion时找不到vins_node节点的问题解决

    问题 xff1a 在执行 rosrun vins vins node span class token operator span span class token operator span catkin ws span class to
  • Faster RCNN(Pytorch版本)代码及理论笔记

    文章目录 前言一 Faster RCNN整体流程二 PASCAL VOC2012数据集1 简介2 下载方式3 文件结构及含义 三 加载数据集四 数据预处理1 流程2 标准化数据3 缩放4 将图片处理为统一尺寸5 数据预处理的输入输出 五 B
  • K8S 网络CNI

    1 简介 CNI 容器网络接口 Container Network Interface xff1a 由Google和Core OS主导制定的容器网络标准 xff0c 它仅仅是一个接口 xff0c 具体的功能由各个网络插件自己去实现 xff1

随机推荐

  • 二叉树-前-中-后序遍历

    二叉树 二叉树概念 xff1a 1 空树 2 非空 xff1a 根节点 xff0c 根节点的左子树 xff0c 根节点的右子树组成 注意 xff01 注意 xff01 时刻记得二叉树是根 xff0c 根的左子树 xff0c 根的右子树 xf
  • 变量的声明与定义&&内部函数与外部函数

    1 变量的声明与定义 对于函数 声明部分是对有关标识符 xff08 变量 函数 结构体 xff09 的属性进行声明 xff1b 函数的声明是函数的原型 xff0c 而函数的定义是对函数功能的定义 对被调函数的声明是放在主调函数的声明部分 x
  • 《Java面向对象编程(阿里云大学)》笔记(文档+思维导图)

    课程链接 xff1a https edu aliyun com course 1011 xff08 还是建议去看课程 xff0c 笔记仅供参考 由于文中的所有内容均为手敲 xff0c 并且有些代码并未验证 xff0c 因此如有错误 xff0
  • 《JDBC数据库开发进阶(阿里云大学》笔记(文档+思维导图)

    第1章 xff1a 事务处理 课时1 xff1a 事务的四大特性 xff08 ACID xff09 课时2 xff1a MySQL中开启和关闭事务 课时3 xff1a JDBC中完成事务处理 在JDBC中处理事务 xff0c 都是通过Con
  • PyCharm使用教程 --- 7、使用PyCharm进行DeBug调试

    很多新手朋友对PyCharm的使用无从下手 xff0c 于是花费了一点时间整理这份PyCharm操作手册 xff0c 完整PDF下载 xff1a 终于写完了 xff01 PyCharm操作手册 V1 0版本 PDF下载 目录如下 xff1a
  • FreeRTOS中断和任务之间的队列,自定义串口通讯协议

    本文提供这样一种方法 xff1a FreeRTOS中串口接收数据中断 xff0c 然后通过队列将数据传递给任务A xff0c 在任务A中对数据进行处理 xff0c 串口使用的通讯协议为自定义 依次给出了串口的初始化 中断服务函数 任务A x
  • 适用于FreeRTOS初学者,FreeRTOS整体知识框架

    写在前面 xff1a 因为实际使用需求 xff0c 学习了一段时间FreeRTOS 从FreeRTOS的市场占有率来看 xff0c 网上的资料应该很多 xff0c 但是在学习过程中尤其是遇到问题的时候 xff0c 发现真正有用的资料并不多
  • 串口通信float型数据的处理和发送;大端小端;联合体union占用字节大小;结构体的定义

    在介绍float型数据的处理和发送之前 xff0c 先介绍一下大端和小端以及联合体的大小分析 一 什么是大端小端 xff1f 如何测试你的CPU是大端还是小端 xff1f 1 大端小端 xff1a 小端 xff1a 采用小端模式的CPU对操
  • Python中以下划线开头的标识符

    1 以单下划线开头的变量 例如 foo代表禁止外部访问的类成员 xff0c 需通过类提供的接口进行访问 xff0c 不能用 34 from xxx import 34 导入 2 以双下划线开头的变量 例如 foo xff0c 代表类的私有成
  • 【CentOS 7】命令行安装GNOME、KDE图形界面(转载)

    目录 正文 一 进入 root 模式 二 安装 X 窗口系统 三 安装图形界面软件 GNOME 四 更新系统的默认运行级别 正文 CentOS 7 默认是没有图形化界面的 xff0c 但我们很多人在习惯了 Windows 的图形化界面之后
  • Git子模块使用教程

    Git子模块 1 问题背景 随着产品的日益增多 xff0c 各个产品之间的业务功能会出现高度的相同性 xff0c 比如产品A有串口的接收功能 xff0c 产品B也有相同的串口功能 xff0c 这类功能我们可以写成一个通用的串口接收模块 这样
  • K8S Flannel

    1 简介 Flannel 由CoreOS开发 xff0c 用于解决docker集群跨主机通讯的覆盖网络 overlay network xff0c 它的主要思路是 xff1a 预先留出一个网段 xff0c 每个主机使用其中一部分 xff0c
  • 阿里云服务器VNC使用步骤

    1 控制台设置 2 VNC桌面连接设置 yum安装太难 xff0c 不建议 分两步 xff1a 1 安装yum 2 安装VNC ubuntu 16 04中安装yum 在Ubuntu系统中按住 xff1a ctrl 43 alt 43 T 打
  • vscode 配置git

    下载git https git scm com 安装时 xff0c 直接默认所有选项安装 然后打开git安装目录 找到如下路径 打开vscode 点击文件 找到 首选项 点击设置 在搜索框搜索 git path 编辑settings jso
  • Intel D405 运行环境——Realsense-viewer

    第一章 Intel D405 运行环境 Realsense viewer 文章目录 第一章 Intel D405 运行环境 Realsense viewer一 开盲盒二 ubuntu环境下的realsense viewer安装 一 开盲盒
  • linux arm64 中断处理流程完整分析 (一)—— 中断向量表、中断处理流程汇编部分

    中断流程老生常谈 xff0c 但我一直以来也只是知道中断过来之后 xff0c 会保护现场 xff0c 跳到中断向量表 xff0c 执行中断 xff0c 恢复现场 xff0c 然后返回 至于更多细节 xff0c 就不得而知了 这篇文章旨在把更
  • ubuntu apt-get update 失败 server certificate verification failed

    报错提示解决方法step 1step 2step 3 报错提示 执行sudo apt get update时 xff0c 报错如下 Ign 188 https mirrors tuna tsinghua edu cn ubuntu xeni
  • mySQL创建数据库和数据表

    SQL 的主要功能是和数据库建立连接 xff0c 进行增删改查的操作 SQL是关系型数据库管理系统的标准语言 SQL 语言的作用 xff1a 数据定义语言 DDL Data Definition Language 用于创建数据库 xff0c
  • C++刷过的笔试题知识点

    函数若无返回值 xff0c 则它一定无形参 X 析构函数可以有参数 xff0c 但没有返回值 某32位系统下 C 43 43 程序void p 61 malloc 100 sizeof xff08 p xff09 61 4 xff1f 指针
  • 5-字符串

    1 字符串基础 1 1 定义字符串 通过String构造函数构造的字符串与字符串直接量的类型不同 前者为引用对象 xff0c 后者为值类型的字符串 span class token keyword var span s1 span clas