关闭

黑马程序员——java String

99人阅读 评论(0) 收藏 举报

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

String

1、String类

(1)字符串是一个特许的对象。

(2)字符串一旦被初始化就不可以被改变。

(3)String s1 = "abc";//s1是一个类类型变量,"abc"是一个对象。

(4)String s2 = new String("abc");

思考:s1 和 s2 有什么区别?

s1在内存中有一个对象,s2在内存中有两个对象。

2、String类部分方法

2.1 获取:

(1)获取字符串中的包含的字符数,也就是字符串的长度。

int length():获取长度。

(2)根据位置获取位置上某个字符。

char charAt(int index)

(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) :由字符串后面开始往前获取ch在字符串中首次出现位置。

2.2 判断:

(1)字符串中是否包含某一个子串。

boolean contains(str);

特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。故indexOf(str)也可以用于对指定判断是否包含。

(2)字符中是否有内容。

boolean isEmpty(): 原理就是判断长度是否为0。

(3)字符串是否是以指定内容开头。

boolean startsWith(str);

(4)字符串是否是以指定内容结尾。

boolean endsWith(str);

(5)判断字符串内容是否相同,复写了Object类中的equals方法。

boolean equals(str);

(6)判断内容是否相同,并忽略大小写。

boolean equalsIgnoreCase();

2.3 转换:

(1)将字符数组转成字符串。

构造函数:

String(char[]);

String(char[],offset,count):将字符数组中的一部分转成字符串,count代表转换个数。

静态方法:

static String copyValueOf(char[]);

static String copyValueOf(char[] data, int offset, int count);

static String valueOf(char[]);

(2)将字符串转成字符数组。

char[] toCharArray();

(3)将字节数组转成字符串。

String(byte[]);

String(byte[],offset,count):将字节数组中的一部分转成字符串。

(4)将字符串转成字节数组。

byte[] getBytes();

(5)将基本数据类型转成字符串。

static String valueOf(int);

static String valueOf(double);

2.4 替换:

String replace(oldchar,newchar);//如果替换的字符原串中没有,则返回原串。

2.5 切割:

String[] split(regex);

2.6 子串:

获取字符串中的一部分。

String substring(begin);//从指定位置(begin)开始到结尾。

String substring(begin,end);//获取的子串包含头(begin)不包含尾(end)。

2.7 大小写转换、去空格、比较:

(1)将字符串转成大写或则小写。

String toUpperCase();

String toLowerCase();

(2)将字符串两端的多个空格去除。

String trim();

(3)对两个字符串进行自然顺序的比较。

int compareTo(string);

3、String类方法练习

(1)自己写一个trim函数,将字符串的两端的空格删除(字符串中间的空格不会被删除)。

class MyTrim
{
	public static void main(String[] args)
	{
		String s1 = "   hello world    ";		
		String s2 = mytrim(s1);
		System.out.println(s1);
		System.out.println(s2);
	}
	public static String mytrim(String s)
	{
		int start = 0;
		int end = s.length()-1;
		while(start<=end && s.charAt(start)==' ')//charAt()获取字符串所指位置上的字符。
		{
			start++;
		}
		while(start<=end && s.charAt(end)==' ')
		{
			end--;
		}
		return s.substring(start,end+1);//获取子串
	}
}

(2)获取两个字符串中最大相同子串。

class GetMaxSubstring
{
	public static void main(String[] args)
	{
		String s1 = "cakgjjhellobionl";
		String s2 = "oiohellovwen";
		String str=getMaxSubString(s1,s2);
		System.out.println(str);
	}
	public static String getMaxSubString(String s1,String s2)
	{
		String max = "";
		String min = "";
		max = (s1.length()>s2.length())?s1:s2;//将长的字符串传给max;
		min = (max==s1)?s2:s1;//将短的字符串传给min;
		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);
				//System.out.println(temp);
				if(max.contains(temp))//if(max.indexof(temp)!=-1)
					return temp;
			}
		}
		return "";	
	}
}

(3)获取一个字符串在另一个字符串中出现的次数。如:"gguunmiuurlwuufgyuu"。

class GetSubCount
{
	public static void main(String[] args)
	{
		String s = "gguunmiuurlwuufgyuu";
		int num = getSubCount("uu",s);
		System.out.println(num);
	}
	public static int getSubCount(String key,String str)
	{
		int count = 0; 
		int index;
		while((index=str.indexOf(key))!=-1)
		{
			System.out.println("str: "+str);
			str = str.substring(index+key.length());//截取字串
			count++;
		}
		return count;//返回次数
	}
}

4、StringBuffer

StringBuffer的特点:

(1)StringBuffer是字符缓冲区,是一个容器。

(2)StringBuffer长度是可变化的。(数组的长度不可变化)

(3)StringBuffer可以字节操作多个数据类型。(数组只能操作一种数据类型)

(4)StringBuffer最终会通过toString方法转换成字符串。

5、StringBuffer特有方法

5.1 存储:

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

StringBuffer insert(index,数据):可以将数据插入到指定index位置。

5.2 删除:

StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。

StringBuffer deleteCharAt(index):删除指定位置的字符。

5.3 获取:

char charAt(int index):获取缓冲区中指定位置index处的字符。

int indexOf(String str) :获取指定字符串str在缓冲区中出现的位置。

int lastIndexOf(String str) :由后往前寻找指定字符串str在缓冲区中出现的位置。

String substring(int start, int end):获取子串。

5.4 修改:

StringBuffer replace(start,end,string):将缓冲区内由start位置开始end位置结束的字串替换为string。

void setCharAt(int index, char ch):将指定位置index处字符替换为ch。

5.5 反转:

StringBuffer reverse();

知识点:JDK1.5 出现了一个StringBuilder,它和StringBuffer有什么区别呢?

(1)StringBuilder的执行速度比StringBuffer的快。

(2)StringBuilder是非同步的,线程非安全。StringBuffer是同步的,线程安全。

6、基本数据类型对象包装类

八种基本数据类型的对象包装类


(1)将基本数据类型封装成对象包装类的好处:可以在对象中定义更多的方法操作该数据。

(2)常用的操作:用于基本数据类型和字符串类型之间做转换。

(3)基本数据类型转换成字符串:

基本数据类型+"";

基本数据类型.toString(基本数据类型值);

如: Integer.toString(34);//将34整数变成"34";

(4)字符串转成基本数据类型:

xxx a = Xxx.parseXxx(String);

int a = Integer.parseInt("123");

Integer i = new Integer("123");

int num = i.intValue();

(5)十进制转成其他进制

toBinaryString();//转二进制

toHexString();//转十六进制

toOctalString();//转八进制

(6)其他进制转十进制

parseInt(string,radix);//radix表示进制数(2,8,16)

7、基本数据类型对象包装类的新特性

JDK1.5 以后,简化了定义方式。

Integer x = new Integer(4);//可以直接写成下面方式

Integer x = 4;//自动装箱

x = x + 5;//x+5:x 进行自动拆箱,变成成了int类型再和5进行加法运算。最后将和装箱赋值给x。

需要注意:在使用时,Integer x = null;前面代码会出现NullPointerException报错。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:950次
    • 积分:68
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档