String 的常用操作

String 类,我可以不负责的说在 Java 中这个类应该是使用最频繁的类了。然而关于它的常用的操作,我却不甚了解。整理这个东西很反人性的,这些方法,你看到他的时候感觉很简单,但是真正用的时候还是不太会,还是会借助网络,今天我就来强行整理一波,不求全,但求精。

在这里,不得不先插上一句话,因为我的强行推荐,我的一些非计算机同学们也关注了我,若是你不慎打开了这条推文,我表示抱歉,但还是希望你可以接着看下去(任性脸~)。请耐心等我到可以不用学习技术的那一天……

先说说 String 对象的构造器,创建一个字符创可以使用如下方法

String s = "123";

String s1 = new String("123");

char[] value = {'1','2','3'};
String s2 = new String(value);
System.out.println(s2); // 123

char[] value1 = {'0','1','2','3','4'};
String s3 = new String(value1,1,3); // 从哪里开始,取几位
System.out.println(s3); //123

StringBuilder sb = new StringBuilder("123");
String s4 = new String(sb);
System.out.println(s4); //123

我就提一下,为什么人家类创建对象都用 new ,而 String 可以直接赋值呢?s 和 s1 的区别到底在哪呢?这样设计的思路还是因为 String 的超高使用频率,为了节省空间,s 的创建过程为在内存中创建一个 “123” 这个 String,然后将引用赋给 s ,如果这个时候还有一条语句 String s5 = “123”,那么 JVM 将不再创建 “123”,而是直接将第一个 “123” 的引用赋给 s5,也就是说 s 和 s5 使用同一块内存,但是使用 new 创建就不一样,不论之前有没有,照样在堆中开辟新的空间 。

下面就看看常用的方法有那些吧!

基础篇

String s = "I don't like JAVA !";

// 返回字符串的长度,注意和数组的length属性的区别呦 !
int length = s.length(); 
System.out.println(length); // 19

// 返回某个字符在字符串中的位置,即数组下标
int position = s.indexOf('!');
System.out.println(position); // 18

// 返回指定下标的字符
char charAt = s.charAt(0);
System.out.println(charAt); // I

// 求子串 参数为下标的起止位置,含前不含后。尾下标可以默认不写
String substring = s.substring(13, 19);
System.out.println(substring); // JAVA !

// 将字符串转换为 大写,相应的还有转换为小写 toLowerCase()
String s1 = s.toUpperCase();
System.out.println(s1); // I DON'T LIKE JAVA !

提高篇

// 字符串的替换,前为旧串,后为新串。
String s2 = s.replace("don't", "do");
System.out.println(s2); // I do like JAVA !

// 去除前后空格
String trim =s.trim();
System.out.println(trim); // I don't like JAVA !

// 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
String format = String.format("请说出真心话: %s", s);
System.out.println(format); // 请说出真心话: I don't like JAVA !

// 以指定字符串进行分割字符串,得到字符串数组。
String[] split = s.split(" ");
for (int i = 0; i < split.length; i++) {
    System.out.print(split[i]); // Idon'tlikeJAVA!
}

// 将一个字符串转换成字节数组,得到一个系统默认的编码格式的字节数组。
byte[] bytes = s.getBytes();

// 将一个字符串转换成字符数组 ,返回的数组中是一个个的字符。
char[] array = s.toCharArray();

郁闷篇

不知道你们是怎么样的,我在写代码的时候总是会不自觉地使用 “==” 来比较两个字符串是否相等。虽然我明确的知道这是不对的,我想还是因为我代码写的少… ,所以你们记住了啊,要使用 equals 方法的!给个例子,自己感受感受区别。

String s3 = "123";
String s4 = new String("123");
String s5 = "123";
System.out.println(s3 == s4); // false
System.out.println(s3 == s5); // true
System.out.println(s3.equals(s4)); // true

最后来看一看基本类型和字符串之间的相互转化。

String s3 = "123";

int num = Integer.parseInt(s3);
System.out.println(num); // 123

String string = String.valueOf(num);
System.out.println(string); // 123

套路就是想得到基本数据类型,就使用对应包装类调用包装类的 praseXXX() 方法。想得到字符串就使用 String 调用 String 类的静态重载方法 valueOf() 。

PS. 大家可以关注我的公众号呦,虽然我还很菜,但是是我在努力嘛!

### C++ 中 `string` 的常用操作方法 #### 1. 基本声明与初始化 在 C++ 中,可以使用多种方式来定义和初始化字符串对象。以下是常见的几种形式[^2]: - 使用默认构造函数创建空字符串: ```cpp std::string str; ``` - 使用常量字符数组初始化字符串: ```cpp std::string str1 = "hello"; ``` - 动态分配并初始化字符串: ```cpp std::string* str2 = new std::string("hello"); delete str2; // 记得释放动态内存 ``` - 自定义重复字符的数量初始化字符串: ```cpp std::string str3(5, 'a'); // 创建包含 5 个 'a' 字符的字符串 ``` #### 2. 获取字符串长度 可以通过成员函数 `.length()` 或者 `.size()` 来获取字符串中的字符数量。 ```cpp std::string str = "example"; int length = str.length(); // 结果为7 ``` #### 3. 子串提取 通过调用 `.substr(pos, len)` 函数可以从指定位置截取子串。 ```cpp std::string str = "abcdefghi"; std::string subStr = str.substr(3, 4); // 截取从索引3开始的4个字符:"defg" ``` #### 4. 查找子串或字符 `.find(sub_str)` 和 `.rfind(sub_str)` 是用于查找子串或者单个字符的方法。如果找到返回其起始位置;如果没有找到,则返回特殊值 `std::string::npos`。 ```cpp std::string str = "hello world!"; size_t pos = str.find("world"); // 找到 "world" 开头的位置:6 if (pos != std::string::npos){ std::cout << "Found at position: " << pos << '\n'; } ``` #### 5. 替换部分字符串 利用 `.replace(start_pos, num_chars_to_replace, replacement_string)` 实现替换功能。 ```cpp std::string str = "abcdef"; str.replace(1, 3, "XYZ"); // 将索引1处开始的三个字符替换成 "XYZ" // 修改后的字符串变为 aXYZf ``` #### 6. 插入删除字符/子串 支持向现有字符串中插入新内容以及移除部分内容的操作。 - **插入**: ```cpp std::string str = "abcd"; str.insert(2, "XY"); // 在索引2之前插入 "XY", 得到 abXYcd ``` - **删除**: ```cpp std::string str = "abcdef"; str.erase(1, 3); // 删除从索引1开始的3个字符,得到 adf ``` #### 7. 翻转字符串 虽然标准库未提供直接针对 `std::string` 的翻转方法,但可借助 `<algorithm>` 头文件里的通用算法完成此任务[^3]。 ```cpp #include <iostream> #include <algorithm> std::string s2 = "12345"; std::reverse(s2.begin(), s2.end()); std::cout << s2 << "\n"; // 输出结果为 54321 ``` #### 8. 比较两个字符串是否相等 除了常规比较运算符外,还可以采用 `.compare(anotherString)` 进行更灵活的对比。 ```cpp std::string str1 = "test"; std::string str2 = "Test"; if(str1.compare(str2) == 0){ std::cout << "Strings are equal.\n"; } else { std::cout << "Strings differ.\n"; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值