String类、StringBuffer类、StringBuilder类的详细讲解

来源:互联网 发布:淘宝发布被限制 编辑:程序博客网 时间:2024/05/18 13:44

String类

了解:

字符串其实本身是一个类型变量,例如:“abc”就是一个对象。
字符串最大特点:一旦被初始化就不可以被改变。那么为什么可以对String变量进行重复的赋值呢?是因为又创建了一个新的对象,只向了新的引用地址。
String类复写了Object类中的equals方法,该方法判断字符串是否相同
String s1 = "abc";
String s2 = new String("abc");
s1和s2的区别:
s1在内存中有一个对象
s2在内存中有二个对象

String类常用操作
1.获取
1.1字符串中包含的字符数,也就是字符串的长度:int length();
1.2根据位置获取位置上某个字符。char charAt(int index);
1.3根据字符获取该字符在字符串中的位置。
 int indexOf(int ch):返回的是ch在字符串中第一次出现的位置
 int indexOf(int ch, int fromIndex):从fromIndex开始,h在字符串中第一次出现的位置
重载:
 int indexOf(String ch):返回的是ch在字符串中第一次出现的位置
 int indexOf(String ch, int fromIndex):从fromIndex开始,ch在字符串中第一次出现的位置



int lastIndexOf(int ch):返回的是ch在字符串中最后一次出现的位置
int lastIndexOf(int ch, int fromIndex):从fromIndex开始,ch在字符串中最后一次出现的位置
重载:
 int lastIndexOf(String ch):返回的是ch在字符串中最后一次出现的位置
 intlastIndexOf(String ch, int fromIndex):从fromIndex开始,ch在字符串中最后一次出现的位置


2.判断
2.1字符串中是否包含某一个子串 Boolean contains(CharSequence s)
特殊之处:indexOf(String str):可以索引str第一次出现的位置,也可以对指定判断是否包含。而且该方法既可以判断,又可以拿位置。
2.2字符串是否有内容 Boolean isEmpty(),判断长度是否为零
2.3字符串是否是以指定内容开头 Boolean startsWith(String str)
重载:Boolean startsWith(String str,int toffset);测试此字符串从toffset开始的子字符串是否以指定前缀开始
2.4字符串是否是以指定内容结尾 Boolean endsWith(String str)
2.5判断字符串的内容是否相同。
Boolean equals(String str)
2.6判断内容是否相同,并忽略大小写。
Boolean equalsIgnoreCase(String str);

3.转换
3.1将字符数组转成字符串
构造函数:String(char[])
String(char[],offset,count):将字符数组中的一部分转换成字符串
静态方法:static String copyValueOf(char[])


3.2将字符串转成字符数组
char[] toCharArray();
3.3将字节数组转换成字符串
构造函数:String(byte[])
String(byte[],offset,count):将字节数组中的一部分转换成字符串
3.4将字符串转换成字节数组
bytep[] getBytes();
3.5将基本数据类型转换成字符串
static String valueOf();

特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

4.替换
String replace(oldchar,newchar);

5.切割
String [] split(regex);

6.子串。获取字符串中的一部分
String substring(begin,end);

7.转换
7.1将字符串转换成大小写
String toUpperCase();
String toLowerCase();
7.2将字符串两端多余空格去除
String trim();
7.3对比两个字符串进行自然顺序的比较
int compareTo(String);

模拟String类的trim()方法:
public static String myTrim(String str) {int start = 0,end = str.length()-1;while(start<=end && str.charAt(start)==' ')start++;while(start<=end && str.charAt(end)==' ')end--;return str.substring(start, end+1);}
将字符串反转:
public static String reverseString(String str){return reverseString(str,0,str.length());}public static String reverseString(String str, int start, int end){//将字符串变成数组char[] arr = str.toCharArray();//反转数组reverse(arr,start,end);//将数组变成字符串return new String(arr);}//反转数组public static void reverse(char[] arr,int start, int end) {for (int x = start,y = end - 1; x < y; x++,y--) {swap(arr,x,y);}}//元素互换public static void swap(char[] arr, int start, int end) {char temp = arr[start];arr[start] = arr[end];arr[end] = temp;}
获取一个字符串中,另一个字符串出现的次数:
public static int getSubCount(String str,String key){int index = 0,count = 0;while((index = str.indexOf(key,index))!=-1){index = index + key.length();count++;}return count;}
获取两个字符串中最大相同子串:
public static String getMaxSubString(String str1,String str2){String max = (str1.length()>str2.length())?(str1):(str2);String min = (str1==max)?(str2):(str1);for (int i = 0; i < min.length(); i++) {for (int j = 0,k = min.length()-i; k!=min.length()+1; j++,k++) {String temp = min.substring(j,k);System.out.println(temp);if(max.contains(temp))return temp;}}return "";}

StringBuffer类

了解:
StringBuffer是字符串缓冲区。是一个容器。而且长度是可变化的。可以直接操作多个数据类型。最终会通过toString方法变成字符串。
1.存储
StringBuffer append():将指定数据作为参数在结尾处添加
StringBuffer insert(index,数据):可以将数据插入到指定位置
2.删除
StringBuffer delete(start,end):删除缓冲区数据
StringBuffer deleteCharAt(index):删除指定位置字符
3.获取
比较简单
4.修改
StringBuffer replace(start,end,str):替换
void setCharAt(index,ch):修改指定字符
5.反转
StringBuffer reverse();

StringBuilder类

了解:
JDK1.5版本后出现StingBuilder
StringBuffer是线程同步
StringBuilder是线程不同步
升级三因素:
1.提高效率
2.简化书写
3.提高安全性
以后开发建议使用StringBuilder

基本数据类型对象包装类

了解:
基本数据类型包装类就是用于基本数据类型和字符串类型之间做转换

基本数据类型转字符串
基本数据类型+"";
基本数据类型.toString(基本数据类型值);

十进制转成其他进制
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制
parseInt(String radix);

小问题:

Integer a = 127;
Integer b = 127; a==b为true

Integer m = 128;
Integer n = 128; m==n为false
为什么呢?
因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会再开辟新的空间

小博客一枚,仅供初学者使用!

0 0
原创粉丝点击