一、字符串概述
字符串是一个特殊的对象,(java.lang.string)此类不能被覆写。
字符串的最大特点:一旦初始化就不可以被改变。指向可以改变,但对象本身绝对不会变。
定义方式:Stringstr = “abc”; String str1 = newString(“abc”);
字符串类覆写了object类中的equals方法,该方法用于判断字符串内容是否相同。两种方式字义字符串的区别:
String s1 = “abc”; String s2 = new String(“abc”);
S1在内存中有一个对象,S2在内存中有两个对象。(new是一个对象,abc是一个对象)
字符串一但声明,值不可以改变:
String s1 = “abc”; String s2 = new String(“abc”); String s3 = “abc”;
问:s1==s2 ? s1==s3? 答 : false true
二、字符串方法详述——获取
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(String str):反向索引返回指定字符在字符串中最后一次出现的索引。
int lastIndexOf(String str,int fromIndex):
int lastIndexOf(int ch):返回的是ch在字符串中最后一次出现的位置。从索引处反向搜
int lastIndexOf(int ch,int fromIndex):
int codePointAt(int index):返回指定索引处字符的ASCII码。
三、字符串方法详述——判断
1、字符串中是否包含某一个子串。
Boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现位置。如果返回-1,表示该str不在字符串中存在。所以也 可以用于对指定判断是否包含if(str.indexOf(“aa”)!=-1)而且该方法即可以判断,又可以获取出现的位置。
2、字符串中是否有内容。
Boolean isEmpty(); 当length()为0时返回true。否则返回false(此方法在1.6版本以后)
3、字符串是否是以指定内容开头。 BooleanstartsWith(str);
4、字符串是否是以指定内容结尾。
Boolean startsWith(str);
5、判断字符串内容是否相同,复写了object类中的equals方法。
Boolean equals(str);
6、判断内容是否相同,并忽略大小写。
Boolean equalsIgnoreCase();
四、字符串方法详述——转换
1、将字符数组转成字符串。
构造函数:String(char[]):将字符数组转成字符串。
String(char[],offset,count):将字符数组中的一部分转成字符串。
静态方法:static String copyValueOf(char[]);
static String copyValueOf(char[]data,int offset,int count);
static String valueOf(char[]); 将任意类型返回字符数组的字符串表示形式。
2、将字符串转成字符数组。
char[] toCharArrar():无参数,因为对象调用。
3、将字节数组转成字符串。
String(byte[]):将字符数组转成字符串。
String(byte[],offset,count):将字节数组中的一部分转成字符串。
4、将字符串转成字节数组。
byte[] getBytes();
5、将基本数据类型转成字符中。
static String valueOf(int);
static String valueOf(double);
eg:3+””; String.valueOf(3); 注:此两种形式效果一样。
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。编码需要字节,字符不行。
五、字符串方法详述——替换
Stringreplace(oldchar,newchar);
eg:String s = “Hello java”; String s1 = s.replace(‘a’,’n’);
注:此两个语句执行后s为Hellojava s1为Hello jnvn 因为字符串一旦初始化值不会变
注:此方法若要替换的字符不存在则返回原字符串。
Sting replace(“oldstring” ,”newstring”); 替换字符串序列。
六、字符串方法详述——切割
String[] split(regex);
eg: String s = “zhangsan,lisi,wangwu”; String[] arr = s.split(“,”);
分割结果为:zhangsan lisi wangwu
七、字符串方法详述——子串(获取字符串中的一部分) (注意角标越界异常)
Stringsubstring(int begin); eg:String s = “abcdef”; s.substring(2); 结果为:cdef
Stringsubstring(int begin,end); s.substring(2,4); 结果为:cd (包含头,不包含尾)
八、字符串方法详述——转换、去除空格、比较
1、将字符串转成大写或者小写。
String toUpperCase(); eg: s. toUpperCase();
String toLowerCase(); eg: s. toLowerCase();
2、将字符串两端的多个空格去除。(实例用于控制密码输入)
String trim(); eg:s. trim();
3、对两个字符串进行自然顺序的比较。
int compareTo(string); eg: s1.compare(s2);
返回值:等于参数字符串返回0大于参数字符串返回一个大于0的值,否则返回一个小于0的值。
字符串演示案例1:模拟一个trim方法,去除字符串两端的空格
思路:1、判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为 止。结尾处判断空格也是如此。
2、当开始和结尾都判断到不是空格时,就是要获取字符串。
classStringTest
{
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args) // 主函数
{
String s= “ ab cd ”;
sop(“(+s+)”);
s =myTrim(s); // 调用去空格方法
sop(“(+s+)”);
}
// 练习一
public static String myTrim(String str)
{
intstart=0; end=str.length()-1;
while(start<=end&&str.charAt(start)==’’)
start++;
while(start<=end&&str.charAt(end)==’’)
end--;
returnstr.substring(start,end+1); // 因为获取子串不包含尾所以+1
}
}
字符串演示案例2:
将一个字符串进行反转。将字符串中指定部分进行反转,“abcdefg”;“abfedcg”。
思路:1、曾经学习过对数组的元素进行反转。
2、将字符串变成数组,对数组反转。
3、将反转后的数组变成字符串。
4、只要将或反转的部分的开始和结束位置作为参数传递即可。
classStringTest
{
public static void sop(String str) // 定义方法用于输出简单
{
System.out.println(str);
}
public static void main(String[] args) // 主函数
{
String s= “ ab cd ”;
sop(“(+s+)”);
sop(“(”+reverseString(s)+”)”);
sop(“(”+reverseString(s,6,9)+”)”); // 结果为“ bacd ”
}
// 练习二将字符串反转
public static String reverseString(String s,intstart,int end) // 重载
{
char[]chs = s.toCharArray(); // 字符串变数组
reverse(chs,start,end) // 反转数组
returnnew String(chs); // 将数组变成字符串
}
public static String reverseString(String s) // 重载
{
// char[]chs = s.toCharArray(); // 字符串变数组
// returnnew String(chs); // 反转数组变成字符串
returnreverseString(s,0,s.length()); // 调用方法,参数从0到最后截取就是正串反转
}
private static void reverse(char[] arr) // 定义方法用于转换
{
for(intstart=0,end=arr.length-1;start<end;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:
获取两个字符串中最大相同子串,第一个动作:将短的那个串进行长度依次递减的字符串打印。“abcwerthelloyuiodef”“cvhellobnm”
思路:1、将短的那个子串按照长度递减的方式获取到。
2、将每获取到的子串去长串中判断是否包含,如果包含,已经找到!class StringTest3
{
publicstatic String getMaxSubString(String s1, String s2) // 定义方法获取是否包含字符串
{
Stringmax = “”,min = “”; // 判断哪个参数字符串是长的,哪个是短的。
max= (s1.length()>s2.length())?s1:s2;
min= (max==s1)?s2:s1;
//sop(“max=”+max+”..min=”+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);
// sop(temp); 用于打印出全部子串
if(max.contains(temp)) // if(s1.indexOF(temp) !=-1)
return temp;
}
}
return””;
}
public static voidmain(String[] args) //主函数
{
Strings1= “abcwerthelloyuiodef”;
Strings2= “cvhellobnm”;
getMaxSubString(s1, s2)
}
publicstatic void sop(String str)
{
System.out.println(str);
}
}