标签:system 父类 字符串连接 reverse builder java 输出 get 副本
String是最常操作的引用类型了,但也是我最怕的地方(因为不熟悉),最怕还是String和Array同时出现,所以现在先写下一篇博客熟悉熟悉字符串
我们常说String是不可变的,但的对应的变量为什么还是能"改"为不同的字符串呢?
来看一下String的部分源码
不可变性的好处
String a = new String("String不可变性");
a = new String("String确定不可变吗?");
System.out.println(a);
//输出
//String确定不可变吗?
创建字符串会放到字符串常量池中,下次创建相同的字符串会从常量池中拿取引用,所以相同字符串引用相同
String a = "String不可变性"; //字面量
String b = "String不可变性";
System.out.println(a == b);
//输出
//true
//但new关键字是在堆中复制一个副本,引用地址给了变量,所以指向的对象的地址不同
String a1 = new String("String不可变性"); //对象
String b1 = new String("String不可变性");
System.out.println(a1 == b1);
//输出
//false
对JVM不熟悉的同学可以看我另一篇 学不会的JVM
//字符串常量,JVM会优化,在字符串常量池直接存放“123”
String a = "1" + "2" + "3";
//字符串变量,会在底层创建StringBuilder,然后append,最后toString返回
String a = new String("1") + new String("2");
构造函数 | 解释 |
---|---|
String(byte[] bytes, String charsetName) | 构造一个新的String用指定的字节数组和解码 |
String(String original) | 初始化新创建的String对象,新创建的字符串是参数字符串的副本 |
String(StringBuffer buffer) | 其中包含当前包含在字符串缓冲区参数中的字符序列 |
String(StringBuilder builder) | 其中包含当前包含在字符串构建器参数中的字符序列 |
返回值 | 方法名 | 解释 |
---|---|---|
char | charAt(int index) | 返回指定索引处的字符 |
int | compareTo(String anotherString) | 按字典顺序比较两个字符串 |
int | compareToIgnoreCase(String str) | 按字典顺序比较两个字符串,忽略大小写 |
String | concat(String str) | 将指定的字符串连接到该字符串的末尾 |
boolean | contains(Strin str) | 判断字符串中是否有指定的子字符串 |
boolean | equals(Object anObject) | 判断值是否相同 |
byte[] | getBytes(String charsetName) | 使用命名的字符集将此String编码为字节序列 |
int | length() | 返回此字符串的长度 |
int | indexOf(int ch,int fromIndex) | 返回指定字符第一次出现的字符串内的索引,从指定索引开始 |
int | lastIndexOf(int ch) | 返回指定字符最后一次出现的字符串内的索引 |
String [] | split(String regex) | 将此字符串分割为给定的字符串 |
String | substring(int beginIndex,int endIndex) | 返回一个字符串,该字符串是此字符串的子字符串。 |
char[] | toCharArray() | 将此字符串转换为新的字符数组 |
String | trim() | 返回一个字符串,删除任何前导和尾随空格 |
计算字串出现的次数
public int StrTimes(String a,String b){
int count = 0
int fromIndex = 0;
while( (fromIndex = a.indexOf(b,fromIndex)) != -1 ){
fromIndex += b.length();
count++;
}
return count;
}
他俩的实现方式是创建一个可变的底层数组,且提供各种改变数组序列的方法
这里来看StringBuffer ,StringBuilder类似,就不讲了
常见方法
构造函数
构造函数 | 解释 |
---|---|
StringBuffer() | 构造一个没有字符的字符串缓冲区,初始容量为16个字符 |
StringBuffer(String str) | 构造一个初始化为指定字符串内容的字符串缓冲区,大小为str.length()+16 |
StringBuffer(int capacity) | 构造一个没有字符的字符串缓冲区和指定的初始容量 |
常用方法
返回值 | 方法名 | 解释 |
---|---|---|
StringBuffer | append(String str) | 将指定的字符串附加到此字符序列 |
int | capacity() | 返回当前容量 |
StringBuffer | delete(int start, int end) | 删除此序列的子字符串中的字符 |
StringBuffer | insert(int offset, String str) | 将字符串插入到此字符序列中 |
int | length() | 返回长度(字符数) |
StringBuffer | replace(int start, int end, String str) | 用指定的String中的字符替换此序列的子字符串 |
StringBuffer | reverse() | 导致该字符序列被序列的相反代替 |
String | toString() | 返回表示此顺序中的数据的字符串 |
并且有String的方法 |
简单操作
可以链式操作,因为返回的是this本对象
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("123")
.append("abc")
.append("-----")
.delete(0, 3)
.replace(3, 5, "dddd")
.insert(7, "e");
System.out.println(stringBuffer.length());
System.out.println(stringBuffer.capacity());
System.out.println(stringBuffer.toString());
System.out.println(stringBuffer.reverse());
11
16
abcdddde---
---eddddcba
String适合操作少量数据
StringBuffer适合线程安全操作大量数据
StringBuilder适合单线程操作大量数据
标签:system 父类 字符串连接 reverse builder java 输出 get 副本
原文地址:https://www.cnblogs.com/Howlet/p/12114605.html