黑马程序员——String类

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

距毕老师的基础视频看完以有些日子了,前段时间发现有些地方掌握的不大好,正好这次趁着发技术博客的时机复习一下(哎,第一次发博客,有点紧张,先拿String类开刀)

首先String类是用于描述字符串事物的

String类的特点:
字符串对象一旦被初始化就不会被改变。

public class StringDemo{
	public static void main(String[] args){
		String s1 = "abc";
		String s2 = "abc";
		System.out.println(s1 == s2);
		//true 字符串创建的时候,有一个字符串常量池,s1创建后,"abc"放入其中。s2创建的时候,"abc"已经存在于字符串常量池中,故引用变量s2直接指向了已经存在的"abc"字符串对象,故s1==s2。
		String s3 = new String("abc");
		System.out.println(s1 == s3);
		//false s1创建后,是在字符串常量池中创建了一个"abc"字符串对象。而s3是在堆内存中创建了另外一个"abc"字符串对象。所以,两个对象不是同一个对象。注意与上面的区别。
		s1 = "nba";//"abc"字符串对象并没有被改变,只是引用变量s1指向了新创建的字符串对象"nba"。
		System.out.println("s1 = " + s1);
	}
}

PS:以前这些细节真是不知道,建议大家注意一下,别在这里出错= =

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) :和上面的差不多,只不过是最后次出现的位置,还有几个不同参数形式的lastIndexOf就不列出来了

2,判断
2.1 字符串中是否包含某一个子串。
boolean contains(str):
indexOf(str):

注意:后者可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。
     所以,也可以用于判断是否包含。
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到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72 
        思路:1到100,不包含7,即十位与个位不能为7
*/
class Day5T1 
{
	public static void main(String[] args) 
	{
		fun1();
		fun2();	
		fun3();
	}

	public static void fun1()
	{
		for(int i=1;i<=100;i++)
		{
			if(i/10!=7&&i%10!=7)
				System.out.print(i+"\t");
		}
		System.out.println("");
	}
	public static void fun2()
	{
		for(int i=1;i<=100;i++)
		{
			String s=i+"";
			if(!s.contains("7"))
				System.out.print(i+"\t");
		}
		System.out.println("");
	}
	public static void fun3()
	{
		for(int i=1;i<=100;i++)
		{
			String s=i+"";
			if(s.indexOf("7")==-1)
				System.out.print(i+"\t");
		}
		System.out.println("");
	}

}
PS:刚看到题时我的思路就是先获取个位和十位,然后再进行判断,也就是fun1(),写完后发现通用性不强,若题目的范围变了,代码就得大改= =

然后机智的博主就发现可以用String类的方法来判断也就有了后两个方法~

再来一题

/*
	获取两个字符串中最大相同子串。。
	
	思路:
		1,将短的那个字符串按照长度递减的方式获取子串。
		2,将获取到的子串去长串中判断是否包含,如果包含,则为最大相同子串。
*/

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

		String max = (s1.length()>s2.length())?s1: s2;
		String min = (max==s1)?s2: s1;
		//短字符串长度递减
		for(int x=0; x<min.length(); x++)
		{
			//分别获取相应长度的子串(同长度子串可能不唯一,需移位获取)
			for(int y=0,z=min.length()-x; z<=min.length(); y++,z++)
			{
				String temp = min.substring(y,z);				
				if(max.contains(temp))//if(s1.indexOf(temp)!=-1)
					return temp;
			}
		}
		return "";
	}


	public static void main(String[] args) 
	{
		String s1 = "qwerabcdtyuiop";
		String s2 = "xcabcdvbn";
		sop("s="+getMaxSubString(s2,s1));
	}

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

PS:其实这题关键就是注意字符串min的字符串子集(好像是叫子集),别漏子串了。通过在内循环里进行移动就行(子串首尾标记++)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值