黑马程序员_String类

------- android培训、java培训、期待与您交流! ----------

String类:

字符串是一个特殊的对象
字符串一旦初始化就不可以被改变。
String = "abc";
String str1 = new String("abc");
有什么区别?
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常见功能:
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 lastIndex(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 判断字符串的内容是否相同。
boolean equals(str);

2.6 判断内容是否相同,并且忽略大小写。
boolean equalsIgnoreCase();

3、转换。
3.1 将字符数组转成字符串。
构造函数:String(char[])
  String(char[],offset,count):将字符数组中的一部分转成字符串。
静态方法:static String copyValueOf(char[]);
  static String copyValueOf(char[] date,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 将基本数据类型转成字符串。
String valueOf(int)
String valueOf(double)
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

4、替换
String replace(oldChar,newChar)

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

6、子串:获取子串的一部分。
String[] sbustring(begin);
String[] sbustring(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 = "  Hello Java   ";
		sop(s.toLowerCase());
		sop(s.toUpperCase());
		sop(s.trim());
		String s1 = "abc";
		String s2 = "aaa";
		sop(s1.compareTo(s2));
	}
	public static void method_sub()
	{
		String s = "abcdef";
		//sop(s.substring(20));如果角标不存在,会出现角标越界异常。
		sop(s.substring(2));//打印cdef,从指定位置带结尾。
		sop(s.substring(2,4));//打印cd,从第二位开始取,取到第四位。s.substring(0,s.length())获取整串。
	}
	public static void method_split()
	{
		String s = "zhangsan,lisi,wangwu";
		String[] arr = s.split(",");
		for (int x= 0;x

字符串练习:
一、模拟一个trim方法,去除字符串两端的空格。
思路:
1、判断字符串第一个位置是否是空格,如果是继续向下判断,知道不是空格为止。
结尾处判断空格也是如此。
2、当开始和结尾,都判断不到空格时,就是要获取的字符串。

二、将一个字符串进行反转,将字符串中指定部分进行反转,"abcdefg";"abfedcg"
思路:
1、曾经学习过对数组的元素进行反转。
2、将字符串变成数组,对数组进行反转。
3、将反转后的数组变成字符串。
4、只要将或反转的部分开始和结束位置作为参数传递即可。

三、获取一个字符串在另一个字符串中出现的次数。
"abkkcdkkefkkskk"
思路:
1、定义一个计数器。
2、获取kk第一次出现的位置。
3、从第一次出现位置后剩余的字符串中继续获取kk出现的位置。
每获取一次就计数一次。
4、当获取不到时,计数完成。

四、获取两个字符串中最大相同子串,第一个动作:将短的那个串进行长度依次递减的子串打印。
"abcwerthelloyuiodef"
"cvhellobnm"
思路:
1、将短的那个子串按照长度依次递减的方式获取到。
2、将每个取到的子串去长串中判断是否包含。
如果包含,已经找到。
class StringTest 
{
	public static void main(String[] args) 
	{
		/*练习一
		String s = "   ab cd    ";
		sop("<"+s+">");
		s = myTrim(s);
		sop("<"+s+">");*/
		/*练习二
		String s = "    ab cd    ";
		sop("<"+s+">");
		sop("<"+reverseString(s,4,9)+">");*/
		/*练习三
		String s = "abkkcdkkefkkskk";
		sop("count="+getSubCount(s,"kk"));
		sop("count="+getSubCount_2(s,"kk"));*/
		String s1 = "abcwerthelloyuiodef";
		String s2 = "cvhellobnm";
		sop(getMaxSubString(s1,s2));
	}
	//练习四,获取两个字符串中最大相同子串。
	public static String getMaxSubString(String s1,String s2)
	{
		String max="",min="";
		max = (s1.length()>s2.length())?s1:s2;
		min = (max==s1)?s2:s1;
		sop(max+"......"+min);
		for (int x=0;x 
   StringBuffer 
  
字符串的组成原理就是通过该类完成的。
StringBuffer可以对字符串内容进行增删。
StringBuffer是一个容器。
很多方法与String相同。
StringBuffer是可变长度。
StringBuffer是字符缓冲区。

StringBuffer是一个容器。
特点:
1、而且长度是可变化的。
2、可以直接操作多个数据类型。
3、最终会通过toString方法变成字符串。

C create U update R read D delete


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 dtr):
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。StringBuilder的出现提高了效率。
升级三个因素:
1、提高效率。
2、简化书写。
3、提高安全性。
class StringBufferDemo 
{
	public static void main(String[] args) 
	{
		StringBuffer sb = new StringBuffer("abcdef");
		char[] chs = new char[4];
		
		sb.getChars(1,4,chs,1);//将sb里面的1到4前面一位开始存储到chs里面,从chs第一位开始存。
		for (int x=0; x

基本数据类型包装类:
基本数据类型对象包装类。
byte -- Byte
short --short
int -- Integer
long -- Long
boolean -- Blooean
float -- Float
double -- Double
char -- character

基本数据类型对象包装类的最常见作用:
就是用于基本数据类型和字符串类型之间做转换。

基本数据类型转成字符串。
基本数据类型+""; 
基本数据类型.toString(基本数据类型值);
如Integer.toString(34)://将34整数变成"34";

字符串转成基本数据类型。
xxx a = Xxx.parseXxx(String);
int a = Integer.parseInt("123");
double a = Double.parseDouble("1.23");
boolean b = Blooean.parseBoolean("true");
以上为静态转换。也可以非静态转换如:
为对象调用方式。

Integer i = new Integer("123");
int num = i.intValue();
十进制转成其他进制。
toBinaryString()
toHexString();
toOctalString();

其他进制转成十进制。
parseInt(String,radix);
class IntegerDemo 
{
	public static void main(String[] args) 
	{
		
		//sop("sop max:"+Integer.MAX_VALUE);整数的最大值
		//将一个字符串转成整数。
		int num = Integer.parseInt("123");//必须传入数字格式的字符串。否者报数字格式异常。
		//sop("num="+(num+4));
		int x = Integer.parseInt("110",2);//把110转换成2进制数。
		sop("x="+x);
	}
	public static void sop(String str)
	{
		System.out.println(str);
	}
}
JDK1.5版本以后出现的新特性。
class IntegerDemo1 
{
	public static void main(String[] args) 
	{
		//Integer x = new Integer(4);
		//1.5版本之后出现的新特征,自动装箱。
		Integer x = 4;//简化书写。x为引用数据类型,4为基本数据类型。
		x = x/*x.intValue()*/ + 2;//x为对象,2位整数。x+2;x进行了自动拆箱。变成了int类型和2进行加法运行。
					//在将和进行装箱赋给x。而且Integer比int多了一个值Integer=null。
		
		Integer m = 128;
		Integer n = 123;
		sop("m==n:"+(m==n));//结果为false因为m,n属于两个对象。
		Integer a = 128;
		Integer b = 123;
		sop("a==b:"+(a==b));//结果为true,因为a和b指向了同一个Integer对象。
							//因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会开辟空间。
	}
	
	public static void method()
	{
		Integer x = new Integer("123");
		Integer y = new Integer("123");
		
		sop("x==y:"+(x==y));
		sop("x.equals(y):"+x.equals(y));
	}
	public static void sop(String str)
	{
		System.out.println(str);
	}
}



------- android培训、java培训、期待与您交流! ----------

详细请查看:www.itheima.com

你可能感兴趣的:(Java学习,黑马程序员,面向对象,string)