一、String
public final class String
不能复写操作字符串的功能,因为是final修饰,无法拥有子类。
class StringDemo
{
public static void main(String[] args)
{
//Stirng s = new String(); 不常用
String s1="abc";//s1是一个类类型变量,"abc"是一个对象,使用双引号的都是对象
//字符串最大特点,一旦被初始化就不可以被改变
//s1="kk";//改变了s1指向的对象,"abc"对象的内容未改变
String s2= new String("abc");
System.out.println(s1==s2);//false 不是相同的对象
System.out.println(s1.equals(s2));//true
//String类重写了Object类中的equals方法,该方法用于判断字符串内容是否相同
//s1和s2有什么区别
//s1在内存中有一个对象。s2在内存中有两个对象
}
}
1.构造函数
String()空构造
String(char[] value)参数为字节数组
String(byte[] bytes)参数为字符数组
2.按照面向对象思想对字符串功能进行分类
1.获取
1.1
int
1.2
char
1.3
int
int
int
int
>int
2.判断
2.1
boolean
特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。
if(str.indexOf("aa")!=-1)
而且该方法既可以判断,又可以获取出现的位置。
2.2
boolean
2.3
boolean
2.4
boolean
2.5
boolean
2.6
boolean
3.转换
3.1
构造函数:String(char[])
String(char[],offset,count):将字符数组的一部分转换成字符串
静态方法:static
static
static
static
3.2
char[]
3.3
String(byte[])
String(byte[],offset,count)
3.4
byte[]
3.5
static
static
3+"";//String.valueOf(3);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的
4.替换
String
5.切割
String[]
6.子串。获取字符串中的一部分
String
String
7.转换,去除空格,比较
7.1
String
Stirng
7.2
String
7.3
int
下面将各个功能演示一遍:
class StringMethodDemo
{
public static void method_7()
{
String s=" Hello Java ";
sop(s.toUpperCase());//变成大写
sop(s.toLowerCase());//变成小写
sop(s.trim());//去空格
String s1= "a1c";
String s2= "aaa";
sop(s1.compareTo(s2));//按自然顺序比较,如果s1在s2的后面就返回一个大于0的数,相等就返回0.否则返回负数
}
public static void method_sub()
{
String s="abcdef";
sop(s.substring(2));//从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。
sop(s.substring(2,4));//包含头,不包含尾。s.substring(0,s.length())
}
public static void method_split()
{
String s="zhangsan,lisi,wangwu";
String[] arr = s.split(",");//用逗号将字符串切割
for(int i=0;i<arr.length(),i++){
sop(arr[i]);
}
public static void method_replace()
{
String s="Hello java";
//String s1=s.replace('a','n');//返回的是新的字符串 如果要替换的字符不存在,返回的还是原字符串
String s1=s.replace("java","word");
sop("s="+s);
sop("s1="+s1);
}
public static void method_trans()
{
char[] arr={'a','b','c','d','e','f'};
String s = new String(arr,1,3);//将字符数组转换为字符串
sop("s="+s);
String s1="zxcvbnm";
char[] chs = s1.toCharArray();//字符串转换为字符数组
for(int i=0;i
sop("chs="+chs[i]);
}
public static void method_is()
{
String str="ArrayDemo.java";
//判断文件名称是否是Array单词开头
sop(str.startsWith("Array"));
//判断文件名称是否是.java文件
sop(str.endsWith("java"));
//判断文件是否包含Demo
sop(str.contains("Demo"));
}
public static void method_get()
{
String str="abcdeakpf";
//长度
sop(str.length());
//根据索引获取字符
sop(str.charAt(4));//当访问到字符串中不存在的角标时会发生StringIndexOfBoundsException
//根据字符获取索引
sop(str.indexOf('a',3));//如果没有找到返回-1
//sop(str.indexOf("ab",3))
//反向索引一个字符出现的位置
sop(str.lastIndexOf("a"));//返回的是角标
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
method_7();
//method_sub();
//method_split();
//method_replace();
//method_trans();
//method_is();
//method_get();
String s1="abc";
String s2=new String("abc");
String s3="abc";//已经存在的字符串存储在常量池中,另一个变量查找到相同字符串,就不会另外开辟空间了,指向同一个对象,节约内存
System.out.println(s1==s2);
System.out.println(s1==s3);
}
}
二、StringBuffer
public final class StringBuffer
final修饰,没有子类。
StringBuffer是字符串缓冲区,是一个容器。
它有以下特点:
1.而且长度是可变化的。
2.可以字节操作多个数据类型。
3.最终会通过toString方法变成字符串
主要功能:
1.存储
StringBuffer
StringBuffr
2.删除
StringBuffer
StringBuffer
3.获取
char
indexOf(String
int
int
String
4.修改
StringBuffer
void
5.反转
StirngBuffer
6.将缓冲区中的指定数据存储到指定字符数组中
void
具体用法看下面的例子:
class StringBufferDemo
{
public static void main(String[] args)
{
//method_delete();
//method_update();
method_add();
}
public static void method_update()
{
StringBuffer sb=new StringBuffer("abcde");
//sb.replace(1,4,"java");//替换
sb.setCharAt(2,'k');
sop(sb.toString());//变成字符串
}
public static void method_delete()
{
StringBuffer sb=new StringBuffer("abcde");
//sb.delete(1,3);//删除
//sb.delete(0,sb.length()); //清空缓冲区
//sb=new StringBuffer();
//sb.delete(2,3);
sb.deleteCharAt(2);//删除指定位置
sop(sb.toString());
}
public static void method_add()
{
StringBuffer sb=new StringBuffer();
sb.append("abc").append(true).append(34);//方法调用链 操作的同一对象
sb.insert(1,"qq");//在指定位置上插入
// StringBuffer sb1=sb.append(34);
// sop("(sb==sb1):"+(sb==sb1));
sop(sb.toString());//abctrue34
// sop(sb1.toString());
}
public static void sop(String str)
{
System.out.println(str);
}
}
三、StringBuilder
public final class StringBuilder
因为是final修饰,同样也没有子类。
StringBuilder也是字符串缓冲区,是一种容器。它是JDK1.5版本之后出现的,它和StringBuffer的区别:
StringBuffer是线程同步的,比较安全。如果单线程程序,需要判断锁,效率低。
StringBuilder是线程不同步的。。如果是单线程程序,效率高;如需用再多线程,自己加锁进行同步。
StringBuilder和StringBuffer的用法类似,这里就不详细叙述了。