String类
String类:
java为便于对字符串这种常见的数据进行描述,将字符串进行了对象的封装,这样就可以定义多种方法和属性。
字符串的最大特点是一旦被初始化就不可以被改变。
定义字符串的两种方法:
String s1="abc"; 这个在内存中只有一个对象abc
String s2=new String("abc") 这个在内存中有两个对象,一个new.一个abc
String类中的常见方法:
1.equals(),这个方法复写了Object中的方法,是比较两个字符串的内容。
所以上述的:s1==s2>>>>false,比较的是地址
s1.eguqls(s2)>>>>true,比较的是内容
2.获取和判断:
2.1获取字符串的长度:int length()
2.2 根据位置获取某个字符:char charAt(int index)
2.3 根据字符或取字符在字符串中的位置:int indexOf(int ch)>>ch接受的字符码;第一次出现的位置,这个方法有多个重载方式
int insexOf(int ch,int fromIndex)从指定位置开始获取ch的位置
int indexOf(String str),获取字符串str第一次出现的位置
int indexOf(String str,int fromindex)从指定位置开始获取str的位置
int lastindexOf(int ch),反响索引字符出现的位置
2.4 判断字符串中是否包含一个子串:boolean contains(str),indexOf(str)也可以进行这样的判断,判断返回值是否为-1.注意,只需判断用contains,
需要返回值用indexOf。
2.5 判断字符串中是否有内容:boolean isEmpty()>>原理就是判断字符串的长度是否为0
2.6 判断字符串是否以指定内容开头:boolean startsWith(str)
2.7 判断字符串是否一指定内容结尾:boolean endsWith(str)
2.8 忽略大小写判断内容是否相同。boolean equalsIgnoreCase().
代码示例:
package xiaobing.string;
public class StringDemo01
{
public static void method_is()//定义判断的方法
{
String str="ArrayDemo.java";
//判断是否已Array单词开头
sop(str.startsWith("Array"));
//判断是否是是java文件
sop(str.endsWith(".java"));
//判断文件中是否包含D恶mo
sop(str.contains("Demo"));
}
public static void method_get()//练习获取的方法
{
String str="abcdeakpf";
sop(str.length());//获取长度
//根据索引获取字符
sop(str.charAt(4));//访问到不存在的角标时,或有角标越界异常
//恩菊字符获取索引
sop(str.indexOf('d',3));//没有找到角标,返回-1
//反向索引
sop(str.lastIndexOf("a"));
}
public static void main(String[] args)
{
method_get();
}
public static void sop(Object obj)//定义输出的方法,简化代码
{
System.out.println(obj);
}
}
3.转换
3.1 将字符数组转换为字符串:
构造函数String(char[]),
构造函数 String(char[],int offect,int count)>>将数组一部分转换
静态方法:static String copyValueOf(char[]),statc string copyValueOf(char[] data,int offect,count)
3.2 将字符串转换为字符数组>>char[] toCharArray();
3.3 将字节数组转换为字符串,byte[] getBytes()
3.4 将字节数组转换为字符串:
构造函数String(byte[]),
构造函数 String(byte[],int offect,int count)>>将数组一部分转换
3.5 将基本数据类型进行转换:static String valueOf(数据类型)》》》》3+"";String.valueOf(3).
代码示例:
package xiaobing.string;
public class StringDemo02 {
public static void method_trans()
{
char[] arr={'a','b','c','d','e','f'};
String s=new String(arr,1,3);//数组转换为字符串
sop("s="+s);
String s1="zxcvbnm";
char[] chs=s1.toCharArray();//转换为数组
for(int i=0;i<chs.length;i++)
{
sop(chs[i]);
}
}
public static void main(String[] args)
{
method_trans();
}
public static void sop(Object obj)//定义输出的方法,简化代码
{
System.out.println(obj);
}
}<strong><span style="font-size:18px;color:#ff0000;">
</span></strong>
四、替换和切割方法
4.1 替换:String replace(oldchar,newchar),按指定规则进行替换
4.2 切割:String[] split(regex)
4.3 获取字符串中的一部分。String substring(begin);String substing(begin,end).
代码示例:
package xiaobing.string;
public class StringDemo03 {
public static void method_replace()
{
String s="Hello Java";
String s1=s.replace('a', 'b');//替换
String s2="zhangsan,lisi,wangwu";
String[] arr=s2.split(",");//以逗号分分割切割
for(int i=0;i<arr.length;i++)
{
sop(arr[i]);
}
sop("s"+s);
sop("s1="+s1);
sop(s.substring(2));//从指定位置开始获取
sop(s.subSequence(2, 5));//包含头,不包含尾
}
public static void main(String[] args)
{
method_replace();
}
public static void sop(Object obj)//定义输出的方法,简化代码
{
System.out.println(obj);
}
}
五、比较和去除空格方法
5.1 将字符串转换为大写或小写,String toUpperCaer(),String toLowerCase().
5.2 去除两端空格,String trim()
5.3 对两个字符串进行自然顺序比较,int compareTo(string)
代码示例:
package xiaobing.string;
public class StringDemo04 {
public static void method()
{
String s=" Hello Java";
sop(s.toLowerCase());//转为小写
sop(s.toUpperCase());//转换为大写
sop(s.trim());//去除空格
String s1="abc";
String s2="aaa";
sop(s1.compareTo(s2));//返回正数,表示s1>s2,负数表示小于,0位相等
}
public static void main(String[] args)
{
method();
}
public static void sop(Object obj)//定义输出的方法,简化代码
{
System.out.println(obj);
}
}
练习1:
package xiaobing.string;
/*
* 需求:编写程序模拟字符串去除空格
* 思路:从开始和结尾判断是否为空格,直到都不为空格获取的字符串即为无空格的
* 获取到首和尾不为空格的角标后利用substring方法即可。
*/
public class StringTest01 {
public static void myStrim(String str)
{
int start=0;
int end =str.length()-1;
while(start<=end&&str.charAt(start)==' ')//获取首部角标
start++;
while(start<=end&&str.charAt(end)==' ')//获取尾部角标
end--;
String s=str.substring(start, end+1);//包含头不包含尾
System.out.println(s);
}
public static void main(String[] args)
{
myStrim(" asad sdsfg ");
}
}
练习2:
package xiaobing.string;
/*
* 需求:将字符串反转
* 思路:
* 1.字符串变为数组
* 2.对数组反转
* 3.数组变为字符串
*/
public class StringTest02 {
public static String reverseString(String s)
{
//将字符串变为数组
char[] chs=s.toCharArray();
//反转数组
reverse(chs);
//数组转换为字符串
return new String(chs);
}
private static void reverse(char[] arr)//反转数组
{
for(int start=0,end=arr.length-1;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;
}
public static void main(String[] args)
{
String s=" ab cd ";
sop("("+s+")");
sop("("+reverseString(s)+")");
}
public static void sop(String str)//打印语句
{
System.out.println(str);
}
}
练习3:
package xiaobing.string;
/*
* 需求:获取一个字符串在另一个字符串中出现的次数
* "abkkcdkkedkkskk"
* 思路:
* 1.定义一个计数器
* 2.获取kk第一次出现的位置
* 3.从第一次出现的后面剩余字符串继续找
* 4.获取不到时计数完成
*/
public class StringTest03 {
public static int getSubCount(String str,String key)
{
int count=0;
int index=0;
while((index=str.indexOf(key))!=-1)//获取key的位置
{
str=str.substring(index+key.length());//去除该位置后的字符串
count++;
}
return count;
}
public static void main(String[] args)
{
String str="abkkcdkkefkkskk";
sop("count="+getSubCount(str,"kk"));
}
public static void sop(String str)
{
System.out.println(str);
}
}
StringBuffer字符串缓冲区:
StringBuffer是一个容器,具有存储、删除、获取、修改。该容器长度可变,可以修改字符串内容,并且可以存储任意数据。
1.存储:append()方法,可以添加任意数据,每次添加在结尾处insert(index,数据)将数据指定位置。
2.删除。delete(start,end),删除数据,包含start,不包含end
3.获取:char charAt(int index)
int insdexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)
4.修改
StringBuffer replace(start,end,string)
void setCharAt(int idex,char ch)
5.反转
StringBuffer revese()
package xiaobing.string;
public class StringBufferDemo {
public static void method_add()//添加
{
StringBuffer sb=new StringBuffer();
sb.append("sff").append(123).append(true);
sop(sb.toString());
}
public static void method_del()//删除
{
StringBuffer sb=new StringBuffer();
sb.append("abcdefghjkl");
sb.delete(2, 6);
sop(sb.toString());
}
public static void method_update()
{
StringBuffer sb=new StringBuffer("abcdefghjk");
sb.replace(1,4,"java");
sop(sb.toString());
//sb.setCharAt(2, 'o');替换
}
public static void main(String[] args)
{
method_add();
method_del();
method_update();
}
public static void sop(String str)
{
System.out.println(str);
}
}
StringBuilder:也是字符串缓冲区,于JDK1.5以后出现
StringBuffer 和 StringBuilder 的区别:
StringBuffer线程安全。
StringBuilder线程不安全。
单线程操作,使用StringBuilder 效率高。
多线程操作,使用StringBuffer 安全。