黑马程序员:String类和StringBuffer类

Java语言除了基本类型之外的变量类型都是引用类型。

引用是得到对象的一种方式,是对象的地址,可以理解为简化的指针,但引用屏蔽了一些指针的基本操作,例如++ -- * ,防止程序员直接对地址进行操作。

Java中对象就是通过引用操作的。

java.lang.String类代表不可变的字符序列(使用lang包里的东西,不需要引用lang包

class StringDemo 
{
	public static void main(String[] args) 
	{
		String s1="abc";//s1是一个类类型变量,所以abc是一个对象
		//字符串最大特点:一旦初始化就不可以被改变
		String s2=new	 String("abc");
		//s1和s2有什么区别?
		//s1代表一个对象,s2有两个对象
		System.out.println(s1==s2);
		System.out.println(s1.equals(s2));//String类复写了Object类中的equals方法,该方法用于判断字符串是否相同
	}
}

/*
String类适用于描述字符串事物,那么它提供了多个方法对字符串进行操作
常见的有:“abcd”
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指定位置开始,获取ch在字符串中出现的位置。

     int indexOf(int str);返回的是str在字符串中第一次出现的位置。
	 int indexOf(int str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置。

	 int lastIndexOf(int ch);
2、判断
    2.1字符串是否包含某一个子串
	boolean contains(str);
	特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str步骤字符串中存在,
	所以,也可以用于对指定判断是否包含。
	if(str.indexOf("aaaa")!=-1)
	该方法既可以判断又可以判断获取出现的位置。
	2.2字符中是否有内容
	boolean isEmpty();原来是判断字符串长度是否为0
	2.3字符串是否是以指定内容开头
	boolean startswith(str);
	2.4字符串是否是以指定内容结尾
	boolean endswith(str);
	2.5判断字符串内容是否相同,复写了Object类中的equals方法
	boolean equals(str);
	2.6判断内容是否相同,并忽略大小写
	boolean equalsIgnoreCase();
3.转换
   3.1将字符数组转成字符串
   构造函数:String(char[])
                       String(char[],offset,count):将字符数组中的一部分转成字符串
	静态方法:static String copyValueOf(char[]);
	                    static String copyValueOf(char[] data,int offset,int count)
						static String valueOf(char[]);
   3.2将字符串转成字符数组
   char[] toCharArray();
   3.3将字节数组转成字符串
        String(byte[])
        String(byte[],offset,count):将字节数组中的一部分转成字符串
   3.4将字符串转成字节数组
   byte[] getBytes();
   3.5将基本数据类型转成字符串
   static String valueOf(int)
   static String valueOf(double)

   //3+"";//String.valueOf(3);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。 
4.替换
   String replace(oldchar,newchar);
 5.切割
 String[].split(regex);
 6.子串,获取字符串中的一部分
  String substring(begin);
  String substring(begin,end);
  7.转换、去除空格、比较
     7.1将字符串转成大写或小写
	 String toUpperCase();
	 String toLowerCase();
	 7.2将字符串两端的多个空格去除
	 String trim();
	 7.3对两个字符串进行自然顺序的比较
	 int compareTo(string);
*/
class StringMethodDemo 
{
	public static void method_7()
	{
		String s="   jfkjd jdkfj fjd   ";
		sop(s.toLowerCase());
		sop(s.toUpperCase());
		sop(s.trim());

		String s1="abc";
		String s2="aaa";
		sop(s.compareTo(s2));
	}

	public static void method_sub()
	{
		String s="abcdefgh";
		sop(s.substring(2));//从指定位置到结尾.如果角标不存在,会出现字符串角标越界异常
		sop(s.substring(2,5));//包含头,不包含尾
		//获取整个字符串s.substring(0,s.length());
	}
	public static void method_split()
	{
		String s="jdfa,fjkads,irj";
		String[] arr=s.split(",");
		for(int x=0;x<arr.length;x++)
		{
			sop(arr[x]);
		}
	}
	public static void method_replace()
	{
		String s="hello world";
//		String s1=s.replace('e','g');//如果要替换的字符不存在,返回的还是原字符串
		String s1=s.replace("world","java");
		sop("s="+s);
		sop("s="+s1);
	}
	public static void method_trans()
	{
		char[] arr={'a','b','c','d','e'};
		String s=new String(arr);
		sop("s="+s);
		String s1="afagags";
		char[] chs=s1.toCharArray();
		for(int x=0;x<chs.length;x++)
		{
			sop("ch="+chs[x]);
		}
	}
	public static void method_is()
	{
		String str="ArratDemo.java";
		sop(str.startswith("Array"));//判断文件名称是否是Array单词开头
		sop(str.endswith(".java"));//判断文件名称是否是.java的文件
		sop(str.contains("Demo"));//判断文件名中是否包含Demo

	public static void method_get()
	{
		String str="afgdfgff";
		//长度
		sop(str.length());
		//根据索引获取字符
		sop(str.charAt(4));//当访问到字符串中不存在的角标时会发生SrringIndexOutOfBoundsException。
		//根据字符获取索引
		sop(str.indexOf('f',2));//如果没有找到,返回值为-1
		//反向索引一个字符出现位置
		sop(str.lastIndexOf("a"));
//		System.out.println(str.length());
	}
	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(s2==s3);
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

StringBuffer与String

 

StringBuffer和String类似,但StringBuffer可以对字符串对象进行修改

当修改时,不用另在堆里开内存,而是在原来的内存里添加修改的东西,StringBuffer是线程安全的。

/*
StringBuffer是字符串缓冲区,是一个容器,
特点:1.而且长度是可变化的2.可以字节操作多个数据类型3.最终会通过toString方法变成字符串
C create U update R read D delete
1.存储
   StringBuffer append():将指定数据作为参数添加到已有数据结尾处
   StringBuffer insert(index,数据);可以将数据插入到指定位置
2.删除
StringBuffer delete(start,end);删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index);删除指定位置的字符
3.获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)
4.修改
StringBuffer replace(start,end,string);
void setCharAt(int index,char ch);
5.反转
StringBuffer reverse();
6.void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)

JDK1.5版本之后出现了StringBuilder
StringBuffer是线程同步的(多线程),StringBuilder是线程不同步的(单线程)。
建议使用StringBuilder
升级三个因素
1.提高效率 2.简化书写 3.提高安全性
*/
class StringBufferDemo 
{
	public static void main(String[] args) 
	{
//		method_delete();
//		method_update();
        StringBuffer sb=new StringBuffer("fafafdfgd");
		char[] chs=new char[9];
		sb.getChars(2,4,chs,1);
		for(int i=0;i<chs.length;i++)
		{
			sop("chs["+i+"]="+chs[i]+";");
	}
	public static void method_update()
	{
		StringBuffer sb=new StringBuffer("jgfdgsdfm");
//		sb.replace(1,4,"java");//将角标1-4替换成java
		sb.setCharAt(2,'k');//将角标为2的字母替换成k
		sop(sb.toString());
	}

	public static void method_delete()
	{
		StringBuffer sb=new StringBuffer("affgfg");
//		sb.delete(1,3);
		//清空缓冲区
//		sb.delete(0,sb.length());//删除所有
//      sb.delete(2,4);//删除某一个2-4
		sb.deleteCharAt(2);
		sop(sb.toString());
	}

	public static void method_add()
	{
		StringBuffer sb=new StringBuffer();
		sb.append("abc").append(true).append(34);//方法调用链
//		StringBuffer sb1=sb.append(34);
        sb.insert(1,"qq");
		sop(sb.toString());//abctrue34
//		sop(sb1.toString());
	}

	public static void sop(String str)
	{
		System.out.println(str);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值