当前位置: 首页 > article >正文

String字符串 StringBuilder之常用API

String字符串 && StringBuilder之常用API

字符串是JAVA语言中十分重要的数据结构,它拥有灵活的使用方法和封装好的的API,帮助开发者能够快速上手,这也是JAVA语言的独特之处。相应地,String类、StringBuilder等字符串的使用也是互联网大厂笔试面试、银行等国企面试的重要考察内容。

【预备知识】在java语言中String类不可变的,主要是两个方面:
1.String底层代码声明的类型为final;
2.String本质是通过字符数组char[]存储数据的,而该数组也是final修饰的。

  • 那么我们对字符串进行修改时,有两种思路:一是将其转换为字符串数组,二是将其转换为可变字符串数组。本文会介绍两种不同的方式,读者可以根据需要选择。

1.字符串和字符数组的转换

字符串转成字符数组:

        String str = "this is str";
        char[] ch = str.toCharArray();
        ch[0] = '1';
        String str2 = String.valueOf(ch);
        System.out.println(str2);

上述代码可以用来想要修改字符串中的某个字符。或者使用下文的StringBuilder的setCharAt(位置,字符值)方法,例如:

        String str = "this is str";
        StringBuilder sb = new StringBuilder(str);
        sb.setCharAt(0,'1');
        String str2 = sb.toString();
        System.out.println(str2);

2.String类常用的API

String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。

//String有两种遍历方式,第一种charAt()方法;第二种是先转化为字符数组,再挨个遍历
1 charAt(int i);//返回索引i处的字符
2 toCharArray();//返回此字符串的字符数组
3 length();//返回此字符串的长度
4 isEmpty();//判空 当length()为0时返回true

//5.String的比较
compareTo(String anotherString)//按字典顺序比较两个字符串
compareToIgnoreCase(String anotherString)//按字典顺序且不区分大小写比较两个字符串
equals(String anotherString)//判断两个字符串是否相等,相等返回true否则返回false
equalsIgnoreCase(String str)//同上,不区分大小写。

【Tips】
compareTo()**和compareToIgnoreCase()方法的返回值:其实是返回a和b第一个不同字符ASCII的差值。例:a.compareTo(b)如果a > b 返回大于0的整数;如果a == b 返回0;如果a < b 返回小于0的整数

//6.String的搜索(某个字符可以通过下标int index来确定,某个子串的话参数为String)
indexOf(int ch);// 返回指定字符在此字符串中第一次出现的索引(找不到返回-1)
indexOf(int ch, int fromindex); // 同上, 从指定索引开始搜索
indexOf(String str);//返回子串在此字符串中第一次出现的索引
indexOf(String str, int fromindex);同上,从指定索引开始搜索

//7.最后一次出现的索引
lastIndexOf(int ch);//返回指定字符在此字符串最后一次出现的索引
lastIndexOf(int ch, int fromindex);//同上, 从指定索引开始搜索
lastIndexOf(String str);//返回子串在此字符串最后一次出现的索引
lastIndexOf(String str, int fromindex);//同上, 从指定索引开始搜索

//8.判断前缀
startsWith(String prefix);// 检查是否以某一前缀开始(返回true,或者false)

//9.字符串拆分
split(String regex); // 根据正则表达式拆分

//10.提取子字符串
substring(int beginIndex, int endIndex)//返回从begin开始到end-1结束的子串
toUpperCase(); //将此字符串中的所有字母都换为大写
toLowerCase()//将此字符串中的所有字母都换为小写

3.StringBuilder

提到可变长字符序列,会想到StringBuilder类或者StringBuffer类。但往往我们会使用前者,原因是StringBuilder比StringBuffer更快一些,缺点是StringBuilder不是线程安全的,但在算法竞赛中一般我们用不到多线程。所以,本文主要介绍StringBuilder类。

在 Java 字符串的学习中,我们知道了字符串具有不可变性,当频繁操作字符串时候,会在常量池中产生很多无用的数据。而 StringBuilder 与 String 不同,它具有可变性。相较 String 类不会产生大量无用数据,性能上会大大提高。

因此对于需要频繁操作字符串的场景,建议使用 Stringbuilder 类来代替 String 类,构造方法如下:

//构造一个空字符串生成器,初始容量为 16 个字符;
StringBuilder() 
//构造一个空字符串生成器,初始容量由参数 capacity 指定;
StringBuilder(int catpacity) 
//构造一个字符串生成器,该生成器包含与指定的 CharSequence 相同的字符。;
StringBuilder(CharSequence seq) 
//构造初始化为指定字符串内容的字符串生成器。
StringBuilder(String str) 

创建

//StringBuilder();构建一个空的可变字符串。
//StringBuilder(String str);构建一个值为str的可变字符串。
StringBuilder s = new StringBuilder();//
StringBuilder s1 = new StringBuilder("123456");//123456
System.out.println(s); //可以直接输出

**字符串反转**
//reverse();
System.out.println(s.reverse()); 

遍历:

charAt(int i);// 返回索引i位置的字符
length();//返回此字符串的长度

StringBuilder s = new StringBuilder("123");
for(int i = 0; i < s.length(); i++)
	System.out.println(s.charAt(i)+" ");// 1 2 3
	输出:123

1.字符串连接

//append(String str);在此字符串追加str。
//append(StringBuilder str);在此字符串追加str。
//append(char[] str, int offset, int len);将char的子数组追加到此字符串

StringBuilder s = new StringBuilder("123");
StringBuilder s1 = new StringBuilder("456");
s.append(s1);
System.out.print(s);// 123456

2.获取容量

 int capacity() 方法来获取当前容量,容量指定是可以存储的字符数(包含已写入字符),超过此数将进行自动分配。

3. 替换字符串中的字符

setCharAt(int index, char ch);//将指定索引处的字符替换为ch

4.字符串截取

substring(int start);//返回此字符串从start开始至length-1结束的String
substring(int start, int end);//返回此字符串从start开始至end-1结束的String
toString();//返回此序列中的String表示形式。
(注意以上方法的返回值都是String而不是StringBuilder)

5.查找

indexOf(String str);//返回子字符串第一次出现的索引
indexOf(String str, int fromIndex);//同上,从指定位置查找

lastIndexOf(String str);//返回子字符串最后一次出现的索引
lastIndexOf(String str, int fromIndex);//同上,从指定位置查找

6.删除

delete(int start, int end);//移除此序列从start到end-1的字符串
deleteCharAt(int index);//移除指定索引上的char

StringBuilder s = new StringBuilder("123");
		StringBuilder s1 = new StringBuilder("456");
		s.delete(0, 1);
		s1.deleteCharAt(1); 
		System.out.println(s);// 23
		System.out.println(s1);// 46

参考链接:
https://blog.csdn.net/qq_45714272/article/details/119889613
https://blog.csdn.net/weixin_47174945/article/details/115608403


http://www.kler.cn/news/336990.html

相关文章:

  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-Docker-OpenResty(三)
  • 提升 CI/CD 稳定性:Jenkins 开机自检与推送通知
  • macos php开发环境之macport安装的php扩展安装,php常用扩展安装,port中可用的所有php扩展列表
  • C++ 语言特性21 - 别名模板
  • Python 之进阶语法:with...as...
  • ubuntu下vscode插件arm keil studio pack遇到的问题
  • 京东web 京东e卡绑定 第二部分分析
  • OpenCV视频I/O(17)视频写入类VideoWriter之检查视频编写器是否已经成功初始化的函数isOpened()的使用
  • 【QT Quick】C++交互:与QML类型转换
  • macOS开发环境配置与应用开发问题的延伸探讨
  • 什么是安全运营中心 SOC?
  • ARM base instruction -- movk
  • 将自己写好的项目部署在自己的云服务器上
  • Raft 常见问题解答
  • 开源2+1链动S2B2C商城小程序下社区团长的社群温度营造与商业价值实现
  • STM32 通用同步/异步通信
  • 基于SpringBoot图书馆预约与占座小程序【附源码】
  • JS测试框架——Jest
  • selenium元素定位
  • 仿小米的Disucz模板