------- 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的字符串子集(好像是叫子集),别漏子串了。通过在内循环里进行移动就行(子串首尾标记++)