Python零基础入门(六)——超详细的字符串与正则表达式

news2024/9/24 1:24:18

系列文章目录

个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊


文章目录

  • 系列文章目录
  • 导语
  • 字符串常用操作
    • 拼接字符串
    • 计算字符串的长度
    • 截取字符串
    • 分割字符串
    • 检索字符串
    • 字母的大小写转换
    • 去除字符串中的空格和特殊字符
    • 格式化字符串
  • 正则表达式基础
    • 行定位符
    • 元字符
    • 限定符
    • 字符类
    • 排除字符
    • 选择字符
    • 转义字符
    • 分组
    • 在Python中使用正则表达式语法
  • 使用re模块实现正则表达式操作
    • 匹配字符串
    • 替换字符串
    • 使用正则表达式分割字符串
  • 结语

导语

欢迎来到本系列教程的第六篇,之前的文章已经介绍了基本的输入和输出,变量、数据类型和操作符,列表和元组,本章将重点介绍如何操作字符串和正则表达式的应用。字符串几乎是所有编程语言在项目开发过程中涉及最多的一块内容,而正则表达式则是处理和匹配字符串的强大工具。在本篇博客中,我们将一步步介绍字符串的常用操作,然后深入探讨正则表达式的基本语法和在 Python 中的应用。

字符串常用操作

拼接字符串

拼接字符串是将多个字符串连接成一个字符串的操作。在Python中,我们可以使用加号(+)或者字符串对象的 join() 方法来实现字符串的拼接。例如:

mot_en = 'Remember is a form of meeting,Frgetfulness is a form of freedom.'
mot_cn = '记忆是一种相遇,遗忘是一种自由。'
print(mot_en+'——'+mot_cn)
str_list = ['Hello','world']      # 字符串对象有个 join() 方法,接收的参数是一个由字符串组成的可迭代对象
print(' '.join(str_list))         # 连接符是一个空格

输出结果为:

Remember is a form of meeting,Frgetfulness is a form of freedom.——记忆是一种相遇,遗忘是一种自由。
Hello world

计算字符串的长度

计算字符串的长度是获取字符串中字符个数的操作。在 Python 中,可以使用 len() 函数来获得字符串的长度。例如:

str1 = '人生苦短,我用Python!'
length1 = len(str1)     # 计算字符串长度
print(length1)

输出结果为:

14

从上面的结果中可以看出,在默认的情况下,通过 len() 函数计算字符串的长度时,不区分英文、数字和汉字,所有字符都认为是一个。在实际开发时,有时需要获取字符串实际所占的字节数,即如果采用 UTF-8 编码,汉字占 3 个字节,采用 GBK 或者 GB2312 时,汉字占 2 个字节。这时,可以通过使用 encode() 方法进行编码后再进行获取。例如,如果要获取采用 UTF-8 或者 GBK 编码的字符串的长度,可以使用下面的代码:

str1 = '人生苦短,我用Python!'
length2 = len(str1.encode())       		 # 计算 UTF-8 编码的字符串长度
print(length2)
length3 = len(str1.encode('gbk'))        # 计算 GBK 编码的字符串长度
print(length3)

输出结果为:

28
21

截取字符串

截取字符串是从一个字符串中提取出部分内容的操作。在 Python 中,可以使用切片来截取字符串。切片使用方括号和索引来指定要截取的范围。例如:

str = "Hello World"
sub_str = str[6:11]
print(sub_str)

输出结果为:

World

分割字符串

分割字符串是将一个字符串按照特定的分隔符拆分成多个子串的操作。在 Python 中,可以使用 split() 函数来实现字符串的分割。例如:

str2 = '机 电 研 究 生  >>>  blog.csdn.net/a2360051431'
list1 = str2.split()        # 采用默认分隔符进行分割
list2 = str2.split('>>>')        # 采用多个字符进行分割
list3 = str2.split('.')        # 采用"."进行分割
list4 = str2.split(' ',4)        # 采用空格进行分割,并且只分割前四个
print(str(list1)+'\n'+str(list2)+'\n'+str(list3)+'\n'+str(list4))
list5 = str2.split('>')        # 采用 ">" 进行分割
print(list5)

输出结果为:

['机', '电', '研', '究', '生', '>>>', 'blog.csdn.net/a2360051431']
['机 电 研 究 生  ', '  blog.csdn.net/a2360051431']
['机 电 研 究 生  >>>  blog', 'csdn', 'net/a2360051431']
['机', '电', '研', '究', '生  >>>  blog.csdn.net/a2360051431']
['机 电 研 究 生  ', '', '', '  blog.csdn.net/a2360051431']

在使用 split() 方法时,如果不指定参数,默认采用空白符进行分割,这时无论有几个空格或者空白符都将作为一个分隔符进行分割。例如,上面示例中, 在 “生” 和 “>” 之间有两个空格,但是分割结果(第一行内容)中已经被全部过滤掉了。但是,如果指定一个分隔符,那么当这个分隔符出现多个时,就会每个分隔一次,没有得到内容的,将产生一个空元素。例如,上面结果中的最后一行,就出现了两个空元素。

检索字符串

检索字符串是在一个字符串中查找指定的子串并返回其位置的操作。在 Python 中,可以使用 count() 方法检索指定字符串在另一个字符串中出现的次数。如果检索的字符串不存在,则返回 0,否则返回出现的次数。可以使用 index() 方法或者 find() 方法来实现字符串的检索。

find() 方法用于检索是否包含指定的子字符串。如果检索的字符串不存在,则返回 -1,否则返回首次出现该子字符串时的索引。

index() 方法同 find() 方法类似,也是用于检索是否包含指定的子字符串。只不过如果使用 index() 方法,当指定的字符串不存在时会抛出异常。

startswith() 方法用于检索字符串是否以指定子字符串开头。如果是则返回 True,否则返回 False。

endswith() 方法用于检索字符串是否以指定子字符串结尾。如果是返回 True,否则返回 False。

str3 = '@FaceBook@扎克伯格@雷军'
print('字符串"',str3,'"中包括',str3.count('@'),'个@符号')
print('字符串"',str3,'"中@符号首次出现的位置索引为:',str3.find('@'))
print('字符串"',str3,'"中@符号首次出现的位置索引为:',str3.index('@'))   # find()检索的字符串不存在返回-1,index()则会抛出异常
print('判断字符串"',str3,'"是否以@符号开头,结果为:',str3.startswith('@'))
print('判断字符串"',str3,'"是否以雷军结尾,结果为:',str3.endswith('雷军'))

输出结果为:

字符串" @FaceBook@扎克伯格@雷军 "中包括 3 个@符号
字符串" @FaceBook@扎克伯格@雷军 "中@符号首次出现的位置索引为: 0
字符串" @FaceBook@扎克伯格@雷军 "中@符号首次出现的位置索引为: 0
判断字符串" @FaceBook@扎克伯格@雷军 "是否以@符号开头,结果为: True
判断字符串" @FaceBook@扎克伯格@雷军 "是否以雷军结尾,结果为: True

字母的大小写转换

字母的大小写转换是将字符串中的字母字符转换为大写或小写形式的操作。在 Python 中,可以使用 upper() 函数将字母转换为大写,使用 lower() 函数将字母转换为小写。例如:

str = "Hello World"
upper_str = str.upper()
lower_str = str.lower()
print(upper_str)
print(lower_str)

输出结果为:

HELLO WORLD
hello world

去除字符串中的空格和特殊字符

去除字符串中的空格和特殊字符是清理字符串中不需要的部分的操作。在 Python 中,可以使用 strip() 方法来去除字符串两端的空格和特殊字符,也可以使用 lstrip() 方法去除字符串左边的空格和特殊字符,或使用 rstrip() 方法去除字符串中右边的空格和特殊字符。使用 replace() 函数来替换特定的字符。例如:

str = "  Hello World!  "
trimmed_str1 = str.strip()
trimmed_str2 = str.strip('! ')			# 去除字符串首尾的 "!" " "
trimmed_str3 = str.lstrip()
trimmed_str4 = str.rstrip()
replaced_str = str.replace("!", "")
print(trimmed_str1)
print(trimmed_str2)
print(trimmed_str3)
print(trimmed_str4)  
print(replaced_str)

输出结果为:

Hello World!
Hello World
Hello World!  
  Hello World!
  Hello World  

格式化字符串

格式化字符串是指先制定一个模板,在这个模板中预留几个空位,然后再根据需要填上相应的内容。这些空位需要通过指定的符号标记(也称为占位符),而这些符号还不会显示出来。在Python中,可以使用占位符(%)、format() 方法、f-string 格式化字符串(更加推荐)和模板字符串来实现字符串的格式化。例如:

  1. 使用百分号(%)格式化字符串:这是一种传统的格式化字符串的方法,通过在字符串中使用占位符和 % 运算符来表示要插入的变量。例如:

    name = "Alice"
    age = 25
    formatted_str = "My name is %s and I'm %d years old." % (name, age)
    print(formatted_str)
    

    输出结果为:

    My name is Alice and I'm 25 years old.
    
  2. 使用字符串对象的 format() 方法:这是一种更现代化的格式化字符串的方法,通过在字符串中使用花括号 {} 和 format() 方法来表示要插入的变量。例如:

    name = "Alice"
    age = 25
    formatted_str = "My name is {} and I'm {} years old.".format(name, age)
    print(formatted_str)
    

    输出结果为:

    My name is Alice and I'm 25 years old.
    
  3. 使用 f-string(格式化字符串常量):这是 Python 3.6 及更高版本引入的一种简洁而直观的格式化字符串的方法,通过在字符串前加上字母 “f” 并在花括号 {} 中使用变量来表示要插入的值。例如:

    name = "Alice"
    age = 25
    formatted_str = f"My name is {name} and I'm {age} years old."
    print(formatted_str)
    

    输出结果为:

    My name is Alice and I'm 25 years old.
    
  4. 使用模板字符串:模板字符串是一种更灵活的字符串格式化方法,它使用 string.Template 类和占位符来替换变量。例如:

    from string import Template
    
    name = "Alice"
    age = 25
    template = Template("My name is $name and I'm $age years old.")
    formatted_str = template.substitute(name=name, age=age)
    print(formatted_str)
    

    输出结果为:

    My name is Alice and I'm 25 years old.
    

正则表达式基础

在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码,它使用一系列的符号和特殊字符来描述字符串的模式。接下来,让我们了解一些正则表达式的基本概念。

行定位符

行定位符用于匹配字符串的开头和结尾。在正则表达式中,使用 ^ 表示字符串的开头,使用 $ 表示字符串的结尾。例如:

^tm		# 该表达式表示要匹配以 tm 子串开头的字符串
tm$		# 该表达式表示要匹配以 tm 子串结尾的字符串
tm		# 该表达式表示要匹配 tm 子串出现在任意部分的字符串

元字符

元字符是正则表达式中具有特殊意义的字符。除了上面的 ^$ 外,正则表达式里还有更多的元字符,常见的元字符包括 .(匹配换行符外的任意字符)、\d(匹配数字)、\w(匹配字母、数字、下划线)等。例如:

元字符描述
.匹配除换行符外的任意字符。
\w匹配字母、数字或下划线。等价于 [a-zA-Z0-9_]
\d匹配数字。等价于 [0-9]
\s匹配空白字符,包括空格、制表符、换行符等。
\b匹配单词的边界。
^匹配字符串的开头。
$匹配字符串的结尾。

限定符

限定符用于指定匹配的数量。常见的限定符包括 ?(匹配前面的元素零次或一次)、+(匹配前面的元素一次或多次)、*(匹配前面的元素零次或多次)等。例如:

限定符描述举例
?匹配前面的元素零次或一次。colou?r,该表达式可以匹配 colour 和 color
+匹配前面的元素一次或多次。go+gle,该表达式可以匹配的范围从 gogle 到 goo…gle
*匹配前面的元素零次或多次。go*gle,该表达式可以匹配的范围从 ggle 到 goo…gle
{n}匹配前面的元素恰好n次。go{2}gle,该表达式只匹配 google
{n,}匹配前面的元素至少n次。go{2,}gle,该表达式可以匹配的范围从 google 到goo…gle
{n,m}匹配前面的元素至少n次但不超过m次。employe{0,2},该表达式可以匹配 employ、employe 和 employee 3 种情况

字符类

字符类用于匹配一组字符中的任意一个。在正则表达式中,可以使用方括号 [] 来定义字符类。例如,[abc] 表示匹配字符 a、b 或 c;[aeiou] 就匹配任何一个英文元音字母。

要想匹配给定字符串中任意一个汉字,可以使用 [\u4e00-\u9fa5];如果要匹配连续多个汉字,可以使用 [\u4e00-u9fa5]+

排除字符

排除字符用于匹配不在指定字符类中的字符。在正则表达式中,可以使用脱字符 ^ 来表示排除字符,这个元字符在行定位符中出现过,表示行的开始,而这里将会放到方括号中,表示排除的意思。例如,[^0-9] 表示匹配任意非数字字符;[^a-zA-Z] 表示匹配一个不是字母的字符。

选择字符

选择字符用于匹配多个模式中的一个。在正则表达式中,可以使用竖线 | 来表示选择。例如,cat|dog 表示匹配 cat 或 dog。

匹配身份证的表达式可以写成如下方式:

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$

该表达式的意思是匹配 15 位数字,或者 18 位数字,或者 17 位数字和最后一位。最后一位可以是数字或者是 X 或者是 x。

转义字符

转义字符用于匹配具有特殊意义的字符本身。在正则表达式中,可以使用反斜杠 \ 来表示转义字符。例如,\. 表示匹配句点字符。

分组

通过匹配身份证的例子,相信读者已经对小括号的作用有了一定的了解。小括号字符的第一个作用就是可以改变限定符的作用范围,如 ‘|’、‘*’、‘^’ 等。例如下面的表达式中包含小括号。

(six|four)th

这个表达式的意思是匹配单词 sixth 或 fourth,如果不使用小括号,那么就变成了匹配单词 six 和 fourth 了。

小括号的第二个作用是分组,也就是子表达式。如 (.[0-9]{1,3}){3},就是对分组 (.[0-9]{1,3}) 进行重复操作。

在Python中使用正则表达式语法

在 Python 中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:

'[^a-zA-Z]'

而如果将匹配以字母 m 开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的。

'\bm\W*\b'

而是需要将其中的 “\” 进行转义,即在模式字串前加 r 或 R。使用的代码改写为:

r'\bm\W*\b'

使用re模块实现正则表达式操作

Python 提供了 re 模块,用于实现正则表达式的操作。在实现时,可以使用 re 模块提供的方法(例如,match()search()findall() 等)进行字符串处理。

匹配字符串

匹配字符串可以使用 re 模块提供的 match()search()findall() 等方法。例如:

import re		# re 模块在使用时,需要先应用 import 语句引入

# match 方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回 match 对象,否则返回 None
pattern = r'mr_\w+'          # 模式字符串
string = 'MR_SHOP mr_shop'   # 要匹配的字符串
match = re.match(pattern,string,re.I)     # 匹配字符串,不区分大小写
print(match)
print('匹配值得起始位置:',match.start())
print('匹配值得结束位置:',match.end())
print('匹配位置的元组:',match.span())
print('要匹配的字符串:',match.string)
print('匹配数据:',match.group())
# search 方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回 match 对象,否则返回 None
match = re.search(pattern,string,re.I)
print(match)
# findall 方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。若匹配成功,则返回包含匹配结构的列表,否则返回空列表
match = re.findall(pattern,string,re.I)
print(match)

输出结果为:

<re.Match object; span=(0, 7), match='MR_SHOP'>
匹配值得起始位置: 0
匹配值得结束位置: 7
匹配位置的元组: (0, 7)
要匹配的字符串: MR_SHOP mr_shop
匹配数据: MR_SHOP
<re.Match object; span=(0, 7), match='MR_SHOP'>
['MR_SHOP', 'mr_shop']

替换字符串

使用 re 模块的 sub() 函数可以替换字符串中匹配某个正则表达式模式的部分。例如:

import re

pattern = r'1[34578]\d{9}'       # 定义要替换的模式字符串
string = '中奖号码为:86888888 联系电话为 13111111111'
result = re.sub(pattern,'1XXXXXXXXXXX',string)
print(result)

输出结果为:

中奖号码为:86888888 联系电话为 1XXXXXXXXXXX

使用正则表达式分割字符串

split() 方法用于实现根据正则表达式分割字符串,并以列表的形式返回,其作用与字符串对象的 split() 方法类似,所不同的就是分割字符由模式字符串指定。例如:

import re

pattern = r'[>|/]'         # 定义分隔符
ur1 = '机 电 研 究 生  >>>  blog.csdn.net/a2360051431'
result = re.split(pattern,ur1)    # 其作用与字符串对象的 spilt 方法类型,所不同的就是分割字符由模式字符串指定
print(result)

输出结果为:

['机 电 研 究 生  ', '', '', '  blog.csdn.net', 'a2360051431']

结语

本篇博客我们学习了字符串的常用操作,包括拼接字符串、计算字符串的长度、截取字符串、分割字符串、检索字符串、字母的大小写转换、去除字符串中的空格和特殊字符、格式化字符串。我们还介绍了正则表达式的基础知识,包括行定位符、元字符、限定符、字符类、排除字符、选择字符、转义字符和分组。最后,我们学习了如何使用 re 模块在 Python 中实现正则表达式的操作,包括匹配字符串、替换字符串和分割字符串。

掌握了字符串和正则表达式的基础知识,你将能够更加灵活和高效地处理和操作字符串数据。希望本篇博客对你学习 Python 有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java的汽车服务管理系统(Car Service Management System)

设计一款基于java的管理和跟踪对车辆所做服务的系统。我们的系统允许服务技术人员跟踪客户、他们的车辆以及对这些车辆所做的服务。 需要项目的朋友私信我&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Car Service Management System 基本的使用…

【OpenCV • c++】颜色数据结构与颜色空间转换

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

chatgpt赋能python:Python:一个值得花钱学习的编程语言

Python&#xff1a;一个值得花钱学习的编程语言 近年来&#xff0c;Python成为了一款备受欢迎的编程语言&#xff0c;尤其在数据科学、人工智能等领域表现出色。许多人开始进入Python编程领域&#xff0c;而且Python培训课程也爆发式增长。但是&#xff0c;一些人对于Python的…

react中基于腾讯云cos上传图片组件

react中基于腾讯云cos上传图片组件 效果示例图上传图片组件imageUploadcomponents/imageUpload/index.jsxcomponents/imageUpload/upload.scss 使用组件 效果示例图 上传图片组件imageUpload npm install cos-js-sdk-v5 -S components/imageUpload/index.jsx import ".…

Mac 打开/关闭 iCloud 后导致桌面文件夹、文档删除,恢复步骤!

不小心打开/关闭了 iCloud 后&#xff0c;导致桌面内容全部丢失&#xff0c;再次打开同步&#xff0c;发现还是确实很多内容&#xff0c;如何找回最初的文件副本。 当 iCloud 关闭时&#xff0c;会将任何未上传到 iCloud 云盘的文稿内容转移打包放到当前 Mac 电脑的个人文件夹…

ChatGPT批量生成文章软件:助力创作高效快捷文章

随着人工智能技术的不断发展&#xff0c;ChatGPT批量生成文章软件已经成为了一种强大的创作工具。它能够通过自然语言处理和机器学习算法&#xff0c;快速生成高质量的文章&#xff0c;为创作者提供了高效快捷的创作体验。本文将从随机8-20个方面对ChatGPT批量生成文章软件进行…

【从零开始学习JAVA | 第二十一篇】常见API介绍 System

目录 前言&#xff1a; System&#xff1a; System类中静态方法&#xff1a; 总结&#xff1a; 前言&#xff1a; system 是一个很底层的 API&#xff0c;是一个工具类&#xff0c;提供了一些与系统相关的方法。他在我们写项目的时候提供了一些非常实用的方法&#xff0c;本…

基于Filebeat+Kafka+ELK实现Nginx日志收集并采用Elastalert2实现钉钉告警

目录 基于FilebeatKafkaELK实现Nginx日志收集1.规划好项目架构图2.部署前端web集群3.部署ES集群集群介绍环境准备集群搭建分片和副本 4.部署kafka集群环境准备静态IP配置重启网络服务域名解析设置安装时间同步服务关闭防火墙和selinux kafka集群依赖于zookeeperkafaka和zookeep…

8 系统定时器(Systick)

目录 系统定时器&#xff08;Systick&#xff09; SysTick定时器特性介绍 SysTick定时器的功能 SysTick定时器寄存器介绍 Systick定时器的使用 系统定时器&#xff08;Systick&#xff09; SysTick定时器特性介绍 计数宽度&#xff1a; 24bit来存储数据&#xff0c;2^24…

HOT21-搜索二维矩阵II

leetcode原题链接&#xff1a; 搜索二维矩阵II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[…

【CSS3系列】第八章 · 伸缩盒模型

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

基于matlab使用深度学习的语义分割算法实现(附源码)

一、前言 此示例演示如何使用语义分割网络对图像进行分割。 语义分割网络对图像中的每个像素进行分类&#xff0c;从而生成按类分割的图像。语义分割的应用包括自动驾驶的道路分割和医疗诊断的癌细胞分割。 此示例首先向您展示如何使用预训练的 Deeplab v3 [1] 网络分割图像&am…

git权限异常:fatal: Authentication failed for

本地电脑用户密码修改了&#xff0c;git 提交&#xff0c;拉取出现异常, 就会报这个错误fatal: Authentication failed for http://xxx/xxx/xxx 解决方法&#xff1a; git config --system --unset credential.helper 免输入用户密码方法&#xff1a; git config --global…

【超简单】Ubuntu 安装 bcompare 对比工具

下载 bcompare 安装包&#xff1a;《bcompare-4.4.6.27483_amd64.deb》 https://www.scootersoftware.com/download.php?zzdl4 安装 becompare 安装&#xff1a; sudo dpkg -i bcompare-4.4.6.27483_amd64.deb破解 cd /usr/lib/beyondcompare/ sudo sed -i "s/kee…

革新写作方式:ChatGPT最新版带来高质量聚合文章的批量生成

随着人工智能技术的不断发展&#xff0c;自然语言处理模型也在不断进步。ChatGPT最新版作为一种强大的语言模型&#xff0c;可以生成高质量的聚合文章&#xff0c;为写作方式带来了革新。本文将详细阐述ChatGPT最新版带来的革新之处&#xff0c;包括其应用领域、生成文章的流程…

剑指 Offer 12: 矩阵中的路径

这道题看着简直是完全没思路&#xff0c;看了下发现是使用回溯的方法。 下面这里要注意&#xff0c;newi是旧的i加上新的偏移值&#xff01;newj同理&#xff0c;并不是加自己&#xff0c;别昏头&#xff01; s是String类型的变量&#xff0c;要写成size() 下面是正确的代码&a…

计算机组成原理笔记——指令系统、中央处理器、总线、I/O系统(王道考研)(持续更新)

文章目录 前言指令系统指令系统概述指令格式扩展操作码 指令寻址方式指令寻址数据寻址基本的寻址思路偏移寻址隐含寻址 程序的机器级代码表示汇编基础AT&T格式和Intel格式C语言控制结构的汇编表示函数调用栈帧切换栈帧构造 CISC与RISC 中央处理器CPU的功能和基本结构运算器…

企业级微服务架构实战项目--xx优选-详情页面的异步调用completablefuture

一 常见的调用方式 1.1 并发 并发&#xff1a;同一时刻多个线程在访问同一个资源&#xff0c;多个线程对一个点 ​ 例子&#xff1a;春运抢票、微信抢红包、电商秒杀... 1.2 同步串行 代表多任务按先后顺序执行&#xff0c;并且都是同一个线程来执行。 1.3 异步串行 代表…

【Java面试题】Java基础语法

文章目录 JDK、JRE和JVM的关系栈和堆分别存的什么数据异步和同步线程和进程区别java的数据类型有哪些equals和HashCode重写的问题?深拷贝和浅拷贝的区别和equals的区别常见的运行时异常有哪些&#xff1f; JDK、JRE和JVM的关系 JDK、JRE和JVM的关系&#xff1a; JDK(Java De…

数据库监控与调优【一】—— 数据库调优的维度

数据库调优的维度 左边是千金良方的&#xff0c;右边是个人优化的 业务需求 不合理的需求&#xff0c;可能会造成很多问题勇敢地对不合理的需求说不拨乱反正&#xff0c;把不合理的需求变成合理的需求 例子 财务SaaS系统&#xff0c;财务领域有种叫做代账的概念&#xff0c…