黑马程序员————Java基础之String类与StringBuffer类

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

String类

概述

 String是字符串的类类型,用于描述字符串事物。字符串是一个特殊的对象,一旦初始化就不可以改变。例如以下代码:

class StringDemo 
{
	public static void main(String[] args) 
	{
		String s = "abc";
		String s1 = "abc";
		String s2 = new String("abc");


		System.out.println(s1==s2);
		System.out.println(s1.equals(s2));	
		System.out.println(s==s1);
	}
}

结果如下:

因为字符串对象是在常量池存在的数据,常量池指的是在编译期被确定,并保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。因为s和s1的"abc"都是字符串常量,在编译时就已经确定,所以s和s1指向的是同一个对象,s==s1结果为turn。而s1.equals(s2)结果为turn是因为String类复写了Object类中equals方法,该方法用于判断字符串是否相同。而s1==s2,,比较的是对象是否相同,但是String s2 = new String("abc")这句话相当于重新创建了一个对象,所以s1==s2,的引用地址值是不一样的,s1==s2返回结果为false。

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指定位置开始,获取ch在字符串中出现的位置。

  int indexOf(String str):返回的是str在字符串中第一次出现的位置。

  int indexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取str在字符串中出现的位置。

  int lastIndexOf(int ch) :反向索引。

  
2,判断。
 2.1 字符串中是否包含某一个子串。

  boolean contains(str):

  特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。 if(str.indexOf("aa")=-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)

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

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);

下面通过几个练习来学习一下这些方法的运用;

1:

//1,模拟一个trim方法,去除字符串两端的空格。
class  StringTest
{
	public static void main(String[] args) 
	{
		String str="    ab cd     ";
		System.out.println(myTrim(str));
	}

	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);

	}
}

2;

 
//练习二:将字符串反转。

class StringTest2 
{
	public static void main(String[] args) 
	{
		String str ="abcdefg";
		System.out.println(reverseString(str,0,str.length()));
	}

	public static String reverseString(String s,int start,int end)
	{
		//字符串变数组。
		char[] chs = s.toCharArray();

		//反转数组。
		reverse(chs,start,end);

		//将数组变成字符串。
		return new String(chs);
	}
	public static String reverseString(String s)
	{
		return reverseString(s,0,s.length());
		
	}

	private static void reverse(char[] arr,int x,int y)
	{
		for(int start=x,end=y-1; start<end ; start++,end--)
		{
			swap(arr,start,end);
		}
	}
	private static void swap(char[] arr,int x,int y)
	{
		char temp = arr[x];
		arr[x] = arr[y];
		arr[y] = temp;
	}
}


3;

/*
3,获取一个字符串在另一个字符串中出现的次数。
	"abkkcdkkefkkskk"
*/
class  StringTest3
{

	public static void main(String[] args) 
	{
		String str = "kkabkkcdkkefkks";
		sop("count="+getSubCount(str,"kk"));
	}

	public static void sop(String str)
	{
		System.out.println(str);
	}
	
	public static int getSubCount(String str,String key)
	{
		int count = 0;
		int index = 0;

		while((index=str.indexOf(key))!=-1)
		{
			sop("str="+str);
			str = str.substring(index+key.length());

			count++;	
		}
		return count;
	}
}


4;

/*
4,获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。
	"abcwerthelloyuiodef"
	"cvhellobnm"

*/

class  StringTest3
{

	public static String getMaxSubString(String s1,String s2)
	{

		String max = "",min = "";

		max = (s1.length()>s2.length())?s1: s2;

		min = (max==s1)?s2: s1;
		

		for(int x=0; x<min.length(); x++)
		{
			for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
			{
				String temp = min.substring(y,z);
				
				sop(temp);
				if(max.contains(temp))
					return temp;
			}
		}
		return "";
	}


	public static void main(String[] args) 
	{
		String s1 = "ab";
		String s2 = "cvhellobnm";
		sop(getMaxSubString(s2,s1));
	}

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

StringBuffer类

概述:

StringBuffer是字符串缓冲区,是一个容器,字符串的组成原理就是通过该类实现的。可以对数据进行增删改查等操作。很多方法都和String类相同。

特点:

1,长度是可变化的。

2,可以字节操作多个数据类型。

3,最终会通过toString方法变成字符串。

StringBuffer类常用方法:

1,存储。

 StringBuffer append():将指定数据作为参数添加到已有数据结尾处。

 StringBuffer insert(index,数据):可以将数据插入到指定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,提高安全性。

 



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值