字符串相关知识

news2024/9/30 9:26:40

目录

一、Java中的字符串

1. 定义与创建

2. 字符串操作

(1)连接

(2)获取长度

(3)查找子串

(4)字符串比较

(5) 字符串转换

(6)Java中的字符串基本操作拓展

一、创建字符串

1. 直接创建字符串常量

2. 使用String类构造函数创建

二、获取字符串信息

1. 获取字符串长度

2. 获取指定位置的字符

三、字符串比较

1. 使用equals()方法比较内容

2. 使用equalsIgnoreCase()方法忽略大小写比较内容

3. 使用compareTo()方法比较字符串大小关系(字典序)

四、字符串查找

1. 查找子串首次出现的位置(indexOf)

2. 查找子串最后一次出现的位置(lastIndexOf)

五、字符串截取

六、字符串替换

1. 使用replace方法替换单个字符

2. 使用replaceAll方法按照正则表达式替换

3. 使用replaceFirst方法替换首次匹配的子串

3.Java中的字符串拓展

1. 不可变性

2. 字符串格式化

3. 字符串池

4. 遍历字符串

5. 正则表达式与字符串

6. 国际化(i18n)与字符串

7. 空字符串与null的区别

8. 字符串编码转换(高级用法)

二、C++中的字符串

1. 定义与创建(C++ 中的std::string)

2. 字符串操作

(1)连接

(2)获取长度

(3)索引和切片(C++中的子串操作)

(4)查找子串

(5) 字符串比较

(5)字符串与字符数组的转换

(6)C++中的字符串基本操作拓展

一、创建字符串

1. 直接初始化

2. 默认初始化

3. 从字符数组初始化

4. 使用部分字符数组初始化

二、获取字符串信息

1. 获取字符串长度

2. 获取指定位置的字符

三、字符串比较

1. 使用比较运算符(==、!=、<、>、<=、>=)

2. 使用compare方法比较字符串大小关系(字典序)

四、字符串查找

1. 查找子串首次出现的位置(find)

2. 查找子串最后一次出现的位置(rfind)

五、字符串截取

1. 使用substr方法截取子串(从指定位置到末尾)

2. 使用substr方法截取指定范围的子串

六、字符串替换

1. 使用replace方法替换单个字符或子串

3.C++中的字符串拓展

1. 内存管理

2. 字符串的迭代器

3. 字符串与数字的转换

4. 原始字符串字面量(C++11引入)

5. 字符串的拼接效率优化

6. 自定义字符串类(进阶概念)

7. C++20中的字符串新特性(如果适用)

8. 字符串与文件操作


以下是Java和C++中的字符串相关知识:

一、Java中的字符串

1. 定义与创建

• 在Java中,字符串是对象。可以使用双引号直接创建字符串常量,例如:String str = "Hello";

• 也可以使用String类的构造函数创建字符串对象,如String str = new String("Hello");,不过直接使用双引号创建字符串更为常用,因为Java会对相同内容的字符串常量进行优化,使其在内存中只有一份。

2. 字符串操作

(1)连接

• 可以使用+运算符连接字符串。例如:String s1 = "Hello"; String s2 = " World"; String result = s1 + s2;

• 也可以使用StringBuilder或StringBuffer类(在需要频繁连接字符串时效率更高)进行连接操作。例如:

• StringBuilder sb = new StringBuilder();

• sb.append("Hello");

• sb.append(" World");

• String result = sb.toString();

(2)获取长度

• 使用length()方法获取字符串的长度。例如:String str = "Hello"; int len = str.length();

• 索引和切片(Java中称为子串操作)

• 使用charAt()方法获取指定索引处的字符,索引从0开始。例如:String str = "Hello"; char c = str.charAt(1);(这里c的值为'e')

• 使用substring()方法获取子串。有两种重载形式:

• substring(int beginIndex):返回从beginIndex开始到字符串末尾的子串。例如:String str = "Hello"; String sub = str.substring(1);(sub的值为"ello")

• substring(int beginIndex, int endIndex):返回从beginIndex开始到endIndex - 1的子串。例如:String str = "Hello"; String sub = str.substring(1, 3);(sub的值为"el")

(3)查找子串

• 使用indexOf()方法查找子串首次出现的位置,若找到则返回索引值,否则返回 - 1。例如:String str = "Hello World"; int pos = str.indexOf("World");(pos的值为6)

• 还有lastIndexOf()方法用于查找子串最后一次出现的位置。

(4)字符串比较

• 使用equals()方法比较两个字符串的内容是否相等。例如:String s1 = "Hello"; String s2 = new String("Hello"); boolean isEqual = s1.equals(s2);(isEqual的值为true)

• 注意不要使用==来比较字符串内容,==在Java中比较的是对象的引用(内存地址),除非是比较字符串常量(因为Java对相同内容的字符串常量优化为同一对象)。

(5) 字符串转换

• 可以使用getBytes()方法将字符串转换为字节数组(例如在进行网络传输或文件存储时),默认使用平台的字符编码。例如:String str = "Hello"; byte[] bytes = str.getBytes();

• 使用toCharArray()方法将字符串转换为字符数组。例如:String str = "Hello"; char[] charArray = str.toCharArray();

(6)Java中的字符串基本操作拓展

一、创建字符串
1. 直接创建字符串常量

• 使用双引号创建字符串常量是最常见的方式。例如:String str1 = "Hello, World!";这种方式创建的字符串会被存储在字符串池中(如果池中不存在相同内容的字符串)。

2. 使用String类构造函数创建

• 可以从字符数组创建字符串。例如:char[] charArray = {'H', 'e', 'l', 'l', 'o'}; String str2 = new String(charArray);

• 也可以指定字符数组的一部分来创建字符串。例如:char[] charArray = {'H', 'e', 'l', 'l', 'o'}; String str3 = new String(charArray, 1, 3); // 从索引1开始取3个字符,结果为 "ell"

二、获取字符串信息
1. 获取字符串长度

• 使用length()方法。例如:String str = "Hello"; int len = str.length(); // len的值为5

2. 获取指定位置的字符

• 使用charAt()方法。例如:String str = "Hello"; char c = str.charAt(1); // c的值为 'e'

三、字符串比较
1. 使用equals()方法比较内容

• 例如:String s1 = "Hello"; String s2 = new String("Hello"); boolean isEqual = s1.equals(s2); // isEqual为true

2. 使用equalsIgnoreCase()方法忽略大小写比较内容

• 例如:String s1 = "Hello"; String s2 = "hello"; boolean isEqualIgnoreCase = s1.equalsIgnoreCase(s2); // isEqualIgnoreCase为true

3. 使用compareTo()方法比较字符串大小关系(字典序)

• 例如:String s1 = "Apple"; String s2 = "Banana"; int result = s1.compareTo(s2); // result为负数,因为 "Apple" 在字典序中排在 "Banana" 之前

四、字符串查找
1. 查找子串首次出现的位置(indexOf)

• 例如:String str = "Hello, World!"; int pos = str.indexOf("World"); // pos的值为7

• 还可以指定从哪个索引位置开始查找。例如:int pos2 = str.indexOf("o", 5); // 从索引5开始查找字符 'o' 的位置

2. 查找子串最后一次出现的位置(lastIndexOf)

• 例如:String str = "Hello, World, Hello"; int pos = str.lastIndexOf("Hello"); // pos的值为13

五、字符串截取

1. 使用substring方法截取子串(从指定位置到末尾)

• 例如:String str = "Hello, World!"; String sub1 = str.substring(7); // sub1的值为 "World!"

2. 使用substring方法截取指定范围的子串

• 例如:String str = "Hello, World!"; String sub2 = str.substring(0, 5); // sub2的值为 "Hello"

六、字符串替换
1. 使用replace方法替换单个字符

• 例如:String str = "Hello"; String newStr = str.replace('l', 'p'); // newStr的值为 "Heppo"

2. 使用replaceAll方法按照正则表达式替换

• 例如:String str = "Hello123"; String newStr = str.replaceAll("\\d", "X"); // newStr的值为 "HelloXXX",将所有数字替换为 'X'

3. 使用replaceFirst方法替换首次匹配的子串

• 例如:String str = "Hello, World, Hello"; String newStr = str.replaceFirst("Hello", "Hi"); // newStr的值为 "Hi, World, Hello"

3.Java中的字符串拓展

1. 不可变性

• 在Java中,String对象是不可变的。一旦创建,就不能修改其内容。例如:

• String str = "Hello";

• 当执行str = str + " World";时,实际上是创建了一个新的String对象,而原有的"Hello"对象并没有被修改。这一特性使得字符串在多线程环境下使用更加安全,但在频繁修改字符串内容的情况下,可能会导致性能问题(可以使用StringBuilder或StringBuffer来解决)。

2. 字符串格式化

• Java提供了String.format()方法用于格式化字符串,类似于C语言中的printf风格的格式化。例如:

• int num = 10;

• String formatted = String.format("The number is %d", num);

• 支持的格式化符号有%d(整数)、%f(浮点数)、%s(字符串)等,还可以指定格式化的宽度、精度等参数,如String.format("%.2f", 3.14159)会将浮点数格式化为保留两位小数的字符串。

3. 字符串池

• Java为了提高性能和节省内存,维护了一个字符串池。当使用双引号创建字符串常量时,JVM会首先在字符串池中查找是否已经存在相同内容的字符串,如果存在,则直接返回该字符串的引用;如果不存在,则创建一个新的字符串对象并放入字符串池中。例如:

• String s1 = "Hello";

• String s2 = "Hello";

• 这里s1和s2实际上指向字符串池中的同一个对象,可以使用==进行比较(因为它们是同一个对象的引用),并且这种比较方式在比较字符串常量时是有效的,但对于使用new创建的字符串对象则不适用(因为new总是创建一个新的对象实例)。

4. 遍历字符串

• 可以使用for - each循环遍历字符串中的字符。例如:

• String str = "Hello";

• for (char c : str) {

• System.out.println(c);

• }

• 也可以使用传统的for循环结合charAt()方法进行遍历:

• for (int i = 0; i < str.length(); i++) {

• char c = str.charAt(i);

• System.out.println(c);

• }

5. 正则表达式与字符串

• Java中的String类提供了一些与正则表达式相关的方法。例如,matches()方法用于判断字符串是否匹配某个正则表达式模式。

• String str = "12345";

• boolean isNumeric = str.matches("\\d+"); // 判断是否全是数字,这里isNumeric为true

• split()方法可以根据正则表达式来分割字符串。

• String text = "apple,banana,cherry";

• String[] parts = text.split(","); // 按照逗号分割字符串,得到一个包含"apple"、"banana"和"cherry"的数组

• replaceAll()方法使用正则表达式替换字符串中的部分内容。

• String input = "Hello, world!";

• String output = input.replaceAll("world", "Java"); // 将"world"替换为"Java",得到"Hello, Java!"

6. 国际化(i18n)与字符串

• Java通过java.util.ResourceBundle类支持国际化。可以将不同语言版本的字符串存储在资源文件(通常是.properties文件)中。

• 例如,有一个messages.properties文件包含默认语言(如英语)的字符串:greeting=Hello,和一个messages_fr.properties文件包含法语版本的字符串:greeting=Bonjour。

• 在代码中,可以这样使用:

• ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.getDefault());

• String greeting = bundle.getString("greeting");

7. 空字符串与null的区别

• 在Java中,空字符串""是一个长度为0的有效字符串对象,而null表示没有字符串对象的引用。

• 在处理字符串时需要注意区分这两种情况。例如:

• String str1 = "";

• String str2 = null;

• 当调用str1.length()时会返回0,而调用str2.length()会抛出NullPointerException。

8. 字符串编码转换(高级用法)

• 如果需要在不同的字符编码之间进行转换,可以使用java.nio.charset.Charset类。

• 例如,将UTF - 8编码的字节数组转换为字符串:

• byte[] utf8Bytes = { - 17, - 65, - 67, 72, 101, 108, 108, 111};

• Charset utf8Charset = Charset.forName("UTF - 8");

• String str = new String(utf8Bytes, utf8Charset);

二、C++中的字符串

1. 定义与创建(C++ 中的std::string)

• 在C++中,可以使用std::string类型来处理字符串。需要包含<string>头文件。例如:#include <string>,然后可以创建字符串对象,如std::string str = "Hello";

• 也可以使用构造函数创建空字符串或从字符数组创建字符串,如std::string str1;(创建空字符串),char arr[] = "Hello"; std::string str2(arr);

2. 字符串操作

(1)连接

• 可以使用+运算符连接std::string对象和字符串字面量或其他std::string对象。例如:std::string s1 = "Hello"; std::string s2 = " World"; std::string result = s1 + s2;

• 还可以使用append()方法来连接字符串。例如:std::string s1 = "Hello"; std::string s2 = " World"; s1.append(s2);

(2)获取长度

• 使用length()或size()方法获取字符串的长度。例如:std::string str = "Hello"; int len = str.length();或者int len = str.size();

(3)索引和切片(C++中的子串操作)

• 可以使用[]运算符访问字符串中的单个字符,索引从0开始。例如:std::string str = "Hello"; char c = str[1];(这里c的值为'e')

• 使用substr()方法获取子串。例如:std::string str = "Hello World"; std::string sub = str.substr(6);(sub的值为"World"),也可以指定长度,如std::string sub = str.substr(0, 5);(sub的值为"Hello")

(4)查找子串

• 使用find()方法查找子串首次出现的位置,若找到则返回索引值,否则返回std::string::npos。例如:std::string str = "Hello World"; size_t pos = str.find("World");

(5) 字符串比较

• 可以使用==、!=、<、>、<=、>=等运算符比较std::string对象。例如:std::string s1 = "Hello"; std::string s2 = "Hello"; bool isEqual = s1 == s2;


(5)字符串与字符数组的转换

• 从std::string转换为字符数组:可以使用c_str()方法,它返回一个指向以空字符结尾的C - 风格字符串(字符数组)的指针。例如:std::string str = "Hello"; const char* cstr = str.c_str();

• 从字符数组创建std::string对象如前面所述,可以直接使用构造函数或者赋值操作。例如:char arr[] = "Hello"; std::string str(arr);

(6)C++中的字符串基本操作拓展

一、创建字符串
1. 直接初始化

• 使用std::string类型,直接用字符串常量初始化。例如:std::string str1 = "Hello";

2. 默认初始化

• 例如:std::string str2; 创建一个空字符串。

3. 从字符数组初始化

• 例如:char arr[] = "Hello"; std::string str3(arr);

4. 使用部分字符数组初始化

• 例如:char arr[] = "Hello"; std::string str4(arr, 1, 3); // 从索引1开始取3个字符,结果为 "ell"

二、获取字符串信息
1. 获取字符串长度

• 使用length()或size()方法,它们是等效的。例如:std::string str = "Hello"; size_t len = str.length(); // len的值为5

2. 获取指定位置的字符

• 使用[]运算符。例如:std::string str = "Hello"; char c = str[1]; // c的值为 'e'

三、字符串比较
1. 使用比较运算符(==、!=、<、>、<=、>=)

• 例如:std::string s1 = "Hello"; std::string s2 = "Hello"; bool isEqual = s1 == s2; // isEqual为true

2. 使用compare方法比较字符串大小关系(字典序)

• 例如:std::string s1 = "Apple"; std::string s2 = "Banana"; int result = s1.compare(s2); // result为负数,因为 "Apple" 在字典序中排在 "Banana" 之前

四、字符串查找
1. 查找子串首次出现的位置(find)

• 例如:std::string str = "Hello, World!"; size_t pos = str.find("World"); // pos的值为7

• 还可以指定从哪个索引位置开始查找。例如:size_t pos2 = str.find("o", 5); // 从索引5开始查找字符 'o' 的位置

2. 查找子串最后一次出现的位置(rfind)

• 例如:std::string str = "Hello, World, Hello"; size_t pos = str.rfind("Hello"); // pos的值为13

五、字符串截取
1. 使用substr方法截取子串(从指定位置到末尾)

• 例如:std::string str = "Hello, World!"; std::string sub1 = str.substr(7); // sub1的值为 "World!"

2. 使用substr方法截取指定范围的子串

• 例如:std::string str = "Hello, World!"; std::string sub2 = str.substr(0, 5); // sub2的值为 "Hello"

六、字符串替换
1. 使用replace方法替换单个字符或子串

• 例如:std::string str = "Hello"; str.replace(1, 1, "p"); // 将索引1处的字符替换为 'p',结果为 "Hepo"

• 例如:std::string str = "Hello, World"; str.replace(str.find("World"), 5, "Universe"); // 将 "World" 替换为 "Universe",结果为 "Hello, Universe"

3.C++中的字符串拓展

1. 内存管理

• 与Java不同,C++中的std::string对象需要考虑内存管理。不过,std::string类内部已经对内存进行了有效的管理。当字符串的长度发生变化时(如连接、追加操作),std::string会自动重新分配足够的内存来容纳新的内容。例如:

• std::string str = "Hello";

• str = str + " World";

• 在这个过程中,std::string类会处理内存的重新分配,以确保能够存储新的字符串内容。

2. 字符串的迭代器

• 可以使用迭代器来遍历std::string对象。例如:

• std::string str = "Hello";

• for (std::string::iterator it = str.begin(); it!= str.end(); ++it) {

• std::cout << *it;

• }

• 也可以使用基于范围的for循环(C++11引入),这是一种更简洁的遍历方式:

• std::string str = "Hello";

• for (char c : str) {

• std::cout << c;

• }

3. 字符串与数字的转换

• 字符串转数字

• 对于将字符串转换为整数,可以使用std::stoi(转换为int)、std::stol(转换为long)等函数。例如:

• std::string numStr = "123";

• int num = std::stoi(numStr);

• 对于浮点数,可以使用std::stof(转换为float)、std::stod(转换为double)等函数。

• 数字转字符串

• 可以使用std::to_string函数将数字转换为字符串。例如:

• int num = 123;

• std::string numStr = std::to_string(num);

4. 原始字符串字面量(C++11引入)

• C++11提供了原始字符串字面量的支持,这对于处理包含特殊字符(如反斜杠、双引号等)的字符串非常有用。原始字符串字面量以R"(开始,以)"结束。例如:

• std::string rawStr = R"(This is a "raw" string \ with special characters.)";

• 在这个字符串中,特殊字符不需要进行转义处理,与普通字符串字面量相比,更方便地表示复杂的字符串内容。

5. 字符串的拼接效率优化

• 当使用+运算符多次拼接std::string时,每次拼接都会创建一个新的临时对象,这可能会导致性能问题。为了提高效率,可以使用std::ostringstream。

• 例如:

• #include <sstream>

• std::ostringstream oss;

• oss << "Hello";

• oss << " World";

• std::string result = oss.str();

6. 自定义字符串类(进阶概念)

• 在C++中,可以根据需求自定义字符串类。需要考虑内存管理、字符存储方式(如动态数组)、字符串操作方法(如连接、查找、比较等)的实现。

• 例如,一个简单的自定义字符串类的部分实现:
class MyString {
private:
    char* data;
    size_t length;
public:
    MyString();
    MyString(const char* str);
    ~MyString();
    MyString operator+(const MyString& other);
    bool operator==(const MyString& other);
    // 其他方法定义...
};


7. C++20中的字符串新特性(如果适用)

• C++20引入了一些新的字符串相关特性。例如,std::format函数提供了更强大和类型安全的格式化功能,类似于Python中的格式化字符串。

• int num = 42;

• std::string formatted = std::format("The number is {}", num);

• 它还支持更复杂的格式化选项,如格式化对齐、填充等。

8. 字符串与文件操作

• 在C++中,std::string经常与文件操作结合使用。例如,使用std::ifstream读取文件内容到std::string对象。
#include <iostream>
#include <fstream>
#include <sstream>
int main() {
    std::ifstream file("test.txt");
    std::stringstream buffer;
    buffer << file.rdbuf();
    std::string fileContent = buffer.str();
    std::cout << fileContent << std::endl;
    return 0;
}
• 同样,也可以使用std::ofstream将std::string内容写入文件。

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

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

相关文章

【C语言进阶】一次解决字符串输入问题——为什么输入这么容易奔溃?

文章一览 写在前面一、scanf、getchar与gets函数的爱恨情仇1.1 scanf函数1.1.1 %c输入单个字符2. %s 输入字符串1.1.3 %d输入数字 1.2 getchar函数1.3 gets函数 二、不同输入情况下的使用三、回顾C语言的输入函数总结 写在前面 在之前的文章中&#xff0c;笔者详细介绍了scanf函…

基于Springboot+Vue的课程教学平台的设计与实现系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

Arm Linux 交叉编译openssl 1.1.1

一、openssl 源码下载 OpenSSL的官方网站或源代码仓库下载最新或指定版本的OpenSSL源代码。 官网地址&#xff1a; https://openssl-library.org/source/index.html 旧版本下载&#xff1a; https://openssl-library.org/source/old/index.html 这里以 1.1.1 为例 国内git…

网线最短不能短于1米?

大家都知道网线最长不能长于100米&#xff0c;但你有没有听说过“网线最短不能短于1米”这个说法呢&#xff1f;也有的朋友说不能低于0.6米。 有的网友说“‌‌网线最短1米的说法是真的。‌ 短于1米的网线电阻几乎为零&#xff0c;设备可能无法识别&#xff0c;因此在实际应用中…

Android 安卓内存安全漏洞数量大幅下降的原因

谷歌决定使用内存安全的编程语言 Rust 向 Android 代码库中写入新代码&#xff0c;尽管旧代码&#xff08;用 C/C 编写&#xff09;没有被重写&#xff0c;但内存安全漏洞却大幅减少。 Android 代码库中每年发现的内存安全漏洞数量&#xff08;来源&#xff1a;谷歌&#xff09…

【前端开发入门】html快速入门

目录 引言html基础模板内容html文档流html 标签块级元素行内元素功能性元素标签嵌套 html编码习惯总结 引言 本系列教程旨在帮助一些零基础的玩家快速上手前端开发。基于我自学的经验会删减部分使用频率不高的内容&#xff0c;并不代表这部分内容不重要&#xff0c;只是对于初学…

一站式大语言模型API调用:快速上手教程

智匠MindCraft是一个强大的AI工具及开发平台&#xff0c;支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型&#xff0c;帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网&#xff0c;注册并登录账号。 进入开发者平台&…

86、Python之鸭子类型:即便行为大于类型,还是要聊一下类型转换

引言 我们的最近几篇文章一直在聊的是鸭子类型&#xff0c;以及支撑鸭子类型相关的魔术方法的内容。其实&#xff0c;鸭子类型的本质在于“行为大于类型”。但是&#xff0c;并不是说类型不重要&#xff0c;只是在特定领域中&#xff0c;行为本身高于类型形式&#xff0c;或者…

爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析

作品详情  运用Hadoop和MongoDB对得分能力数据进行分析&#xff1b;  运用python进行机器学习的模型调理&#xff0c;利用Pytorch框架对爬取的评论进行情感分析预测&#xff1b;  利用python和MySQL对网站的数据进行爬取、数据清洗及可视化。

Chainlit集成LlamaIndex实现知识库高级检索(组合对象检索)

检索原理 对象组合索引的原理 是利用IndexNode索引节点&#xff0c;将两个不同类型的检索器作为节点对象&#xff0c;使用 SummaryIndex &#xff08;它可以用来构建一个包含多个索引节点的索引结构。这种索引通常用于从多个不同的数据源或索引方法中汇总信息&#xff0c;并能…

零工市场小程序如何提高找兼职的效率?

越来越多的人们会选择成为自由职业者&#xff0c;或者在空暇时兼职来获取酬劳&#xff0c;那么传统的找兼职方式&#xff0c;如&#xff1a;中介公司、招聘广告等。 如今大家的生活都已经进入了“快节奏”&#xff0c;零工市场小程序针对这样的问题而提出了解决方案&#xff0…

python Scrapy 框架 demo

文章目录 前言python Scrapy 框架 demo1. 安装2. 百度热搜爬取demo2.1. 初始化项目2.2. 修改 items.pyitems.py2.3. 创建 spiders/baidu_spider.py2.4. 修改 pipelines.py2.5. 修改 settings.py 3. settings.py 相关配置说明4. 启动爬虫测试 前言 如果您觉得有用的话&#xff0…

python+requests接口测试

pythonrequest 一、调用的方法 requests是一个第三方库 &#xff08;1&#xff09; a、下载地方库pip install requests b、pycaharm中下载 &#xff08;2&#xff09;导入requests库 &#xff08;3&#xff09;requests中的三种调用方法 第一种&#xff1a; requests.…

算法训练营打卡Day18

目录 二叉搜索树的最小绝对差二叉搜索树中的众数二叉树的最近公共祖先额外练手题目 题目1、二叉搜索树的最小绝对差 力扣题目链接(opens new window) 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 思…

时间复杂度及空间复杂度(简略)

目录 时间复杂度空间复杂度 时间复杂度 计算时间复杂度时&#xff0c;我们只需计算大致执行次数&#xff0c;再用大O的渐进表示法就可以了 常见的复杂度为O(N),O(1),O(N^2)的几个情况这里就不提了&#xff0c;下面是几个相对来说需要分析的算法 算法1&#xff1a; // 计算str…

【Python报错已解决】TypeError: ‘int‘ object is not subscriptable

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

如何在实际开发中深入使用 yalantinglibs 编译期反射库

yaLanTingLibs 是阿里云开源的现代 C 基础工具库的集合&#xff0c;包括序列化、http、rpc、协程、编译期反射、metric 和日志等库&#xff0c;可以帮助 C 开发者快速构建高性能的 C 应用。2024 云栖大会操作系统技术 Workshop 上&#xff0c;阿里云智能集团高级技术专家、pure…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者&#xff1a;胡玉龙&#xff0c;快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年&#xff0c;快手的数据量已突破800TB大关&#xff0c;其中最大集群的数据量更是达到了数百TB级别。为此&#xff0c;快手将数据…

Docker安装consul + go使用consul + consul知识

1. 什么是服务注册和发现 假如这个产品已经在线上运行&#xff0c;有一天运营想搞一场促销活动&#xff0c;那么我们相对应的【用户服务】可能就要新开启三个微服务实例来支撑这场促销活动。而与此同时&#xff0c;作为苦逼程序员的你就只有手动去 API gateway 中添加新增的这…

基于AI的智能化渗透测试技术研究

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…