栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JavaSE】String类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JavaSE】String类

目录

1.String类的介绍

1.1 创建字符串

1.2 字符串查找

1.3 转化

1.4 字符串的拆分

1.5 字符串截取

1.6 去掉两边空格

2.常量池

使用intern将对象添加到常量池

String类的两种实例化方式

3.字符串的不可变性

4.StringBuffer和StringBuilder

面试题


1.String类的介绍

在Java语言中,提供一个字符串类型,也就是String,但是它不同于int、char等基本数据类型

String是属于引用数据类型,只要是双引号修饰的字符串都是String对象

1.1 创建字符串

 使用常量串构造 

String s1 = "hello bit";

直接newString对象 

String s2 = new String("hello bit"); 

使用字符数组进行构造

char[] array = {'h','e','l','l','o','b','i','t'}; 

String类内部不存在字符串本身,其源码中含有value字符数组和hash成员变量

实际上字符串是存在char类型的数组中

1.2 字符串查找
方法 功能
char charAt(int index) 返回 index 位置上字符,如果 index 为负数或者越界,抛出 IndexOutOfBoundsException 异常
int indexOf(int ch) 返回 ch 第一次出现的位置,没有返回 -1
int indexOf(int ch, int fromIndex) 从 fromIndex 位置开始找 ch 第一次出现的位置,没有返回 -1
int indexOf(String str) 返回 str 第一次出现的位置,没有返回 -1
int indexOf(String str, int fromIndex) 从 fromIndex 位置开始找 str 第一次出现的位置,没有返回 -1
int lastIndexOf(int ch) 从后往前找,返回 ch 第一次出现的位置,没有返回 -1
int lastIndexOf(int ch, int fromIndex) 从 fromIndex 位置开始找,从后往前找 ch 第一次出现的位置,没有返 回-1
int lastIndexOf(String str) 从后往前找,返回 str 第一次出现的位置,没有返回 -1
int lastIndexOf(String str, int fromIndex) 从 fromIndex 位置开始找,从后往前找 str 第一次出现的位置,没有返 回-1
String s = "aaabbbcccaaabbbccc";
System.out.println(s.charAt(3)); // 'b'
System.out.println(s.indexOf('c')); // 6
System.out.println(s.indexOf('c', 10)); // 15
System.out.println(s.indexOf("bbb")); // 3
System.out.println(s.indexOf("bbb", 10)); // 12
System.out.println(s.lastIndexOf('c')); // 17
System.out.println(s.lastIndexOf('c', 10)); // 8
System.out.println(s.lastIndexOf("bbb")); // 12
System.out.println(s.lastIndexOf("bbb", 10)); // 3

1.3 转化

 数值和字符串转化

// 数字转字符串 
String s1 = String.valueOf(1234); 
String s2 = String.valueOf(12.34); 
String s3 = String.valueOf(true);
 String s4 = String.valueOf(new Student("Hanmeimei", 18));

// 字符串转数字  
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34"); 
System.out.println(data1);
System.out.println(data2);

 大小写转换

方法 功能
String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写
String s1 = "hello"; String s2 = "HELLO"; 
// 小写转大写
 System.out.println(s1.toUpperCase());
// 大写转小写 
System.out.println(s2.toLowerCase());

字符串转数组

String s = "hello"; 
// 字符串转数组
char[] ch = s.toCharArray(); 
for (int i = 0; i < ch.length; i++) {
 System.out.print(ch[i]);
}

格式化

public static void main(String[] args) {
 String s = String.format("%d-%d-%d", 2019, 9,14);
 System.out.println(s);
}

指定字符串替换

方法 功能
String replaceAll(String regex, String replacement) 替换所有的指定内容
String replaceFirst(String regex, String replacement) 替换收个内容
String str = "helloworld" ; 
System.out.println(str.replaceAll("l", "_")); //he__o wor_d
System.out.println(str.replaceFirst("l", "_"));//he_lo world

1.4 字符串的拆分
方法 功能
String[] split(String regex) 将字符串全部拆分
String[] split(String regex, int limit) 将字符串以指定的格式,拆分为 limit 组
String str = "hello world hello bit" ; 
String[] result = str.split(" ") ;// 按照空格拆分 
for(String s: result) { 
 System.out.println(s); 
}

 注:1. 字符"|","*","+"都得加上转义字符,前面加上 "\" .

2. 而如果是 "" ,那么就得写成 "\\" .

3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

1.5 字符串截取
方法 功能
String substring(int beginIndex) 从指定索引截取到结尾
String substring(int beginIndex, int endIndex) 截取部分内容
String str = "helloworld" ; 
System.out.println(str.substring(5));//world
System.out.println(str.substring(0, 5));//hello

1.6 去掉两边空格
方法 功能

 String trim()

去掉字符串中的左右空格 , 保留中间空格
String str = " hello world " ; 
System.out.println("["+str+"]");//[ hello world ]
System.out.println("["+str.trim()+"]");[hello world]

2.常量池

为了方便创建String对象,相同的值只储存一份,节省内存,共同访问

只要是双引号修饰的字符串都放入常量池中

Java中实现了常量池技术,除此之外,还有"内存池", "线程池", "数据库连接池"等池思想

设置有常量池的基本类型的包装类:

boolean、byte、short、integer、long、character

基本类型包装类没有设置常量池的:

float、double

String s1 = "hello"; 
String s2 = "hello"; 
String s3 = new String("hello"); 
String s4 = new String("hello"); 
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false 
System.out.println(s3 == s4); // false

String s1="hello";
String s2="hello";
String s3=new String("world");
String s4=new String("world");

 

使用intern将对象添加到常量池

intern 是一个native方法(Native方法指:底层使用C++实现的,看不到其实现的源代码),该方法的作用是手动将创建的String对象添加到常量池中。

public static void main(String[] args) {
    char[] ch = new char[]{'a', 'b', 'c'};
    String s1 = new String(ch); // s1对象并不在常量池中 
    //s1.intern(); // s1.intern();调用之后,会将s1对象的引用放入到常量池中 String s2 = "abc"; 
    // "abc" 在常量池中存在了,s2创建时直接用常量池中"abc"的引用 
    System.out.println(s1 == s2);
}

// 输出false 
// 将上述方法打开之后,就会输出true

String类的两种实例化方式
实例化方式产生实例化对象数是否入字符串常量池是否可以实现重用
直接赋值(String str = "hello")一个自动加入字符串常量池可以重用
构造方法(String str = new String("hello") )两个不会自动入池,可以手工入池注入池中才可重用

3.字符串的不可变性

对字符串的操作,无论是字符串的拆分,大小写的转化、还是替换都是产生了新的对象

也就是说,String原来的对象并没有发生改变,因为String类在修饰时就是不可改变

其内部时通过final修饰的,意味着String类不能被继承

并且value字符数组本身也被final修饰,表明自身的值也是不能被修改的,即不能引用其他字符数

组,但是其引用空间中的内容可以修改

字符串中的引用空间中的内容不可通过外部修改,是因为String类中没有get set方法,并且value通过private修饰,不是由于final的原因

4.StringBuffer和StringBuilder

由于String类有不可变性,为了方便字符串的修改,Java提供了StringBuffer和StringBuilder

String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可 以修改。

频繁修改字符串的情况考虑使用StringBuilder.

两者的用法差不多,StringBuffer和String具有线程安全性,但StringBuilder没有

这两个类在String类的基础之上添加了比较重要的一个方法append
 

StringBuff append(String str) 在尾部追加,相当于 String 的 += ,可以追加: boolean 、 char 、 char[] 、double、 flfloat 、 int 、 long 、 Object 、 String 、 StringBuffff 的变量
char charAt(int index) 获取 index 位置的字符
int length() 获取字符串的长度
int capacity() 获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity) 扩容
void setCharAt(int index, char ch) 将 index 位置的字符设置为 ch
int indexOf(String str) 返回 str 第一次出现的位置
int indexOf(String str, int fromIndex) 从 fromIndex 位置开始查找 str 第一次出现的位置
int lastIndexOf(String str) 返回最后一次出现 str 的位置
int lastIndexOf(String str, int fromIndex) 从 fromIndex 位置开始找 str 最后一次出现的位置
StringBuffff insert(int offffset, String str) 在 offffset 位置插入:八种基类类型 & String 类型 & Object 类型数据
StringBuffffer deleteCharAt(int index) 删除 index 位置字符
StringBuffffer delete(int start, int end) 删除 [start, end) 区间内的字符
StringBuffffer replace(int start, int end, String str) 将 [start, end) 位置的字符替换为 str
String substring(int start) 从 start 开始一直到末尾的字符以 String 的方式返回
String substring(int start , int end) 将 [start, end) 范围内的字符以 String 的方式返回
StringBuffffer reverse() 反转字符串
String toString() 将所有字符按照 String 的方式返回

面试题

以下总共创建了多少个String对象

String str = new String("ab"); // 会创建2个对象 
String str = new String("a") + new String("b"); // 会创建6个对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887488.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号