String类
被final修饰,不可以被覆盖
class StringDemo{ public static void main(String[] args){ String s1="abc"; //s1是一个类类型变量,"abc"是一个对象 //字符串最大的特点:一旦被初始化就不可以被改变 String s2=new String("abc"); System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true //String类覆写了Object类中equals方法,用于判断字符是否相同 }}//s1代表一个对象,s2有2个对象
String类适用于描述字符串事物,因此提供了多个方法对字符串进行操作
获取
字符串中包含的字符数——字符串的长度
int length();
根据位置获取位置上的某个字符
char charAt(int index);
根据字符获取该字符的位置
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再付串中出现的位置前面方法加上last——lastIndexOf(int ch)即反向索引
练习
class StringMethodDemo{ public static void method_get(){ String str="abcdefadfg"; //长度 sop(str.length()); //根据索引获取字符 sop(str.charAt(4));//当访问到字符串中不存在的角标时,会发生越界异常 //根据字符获取索引 sop(str.indexOf('a',3));//如果没有找到,返回-1 } public static void sop(Object obj){ System.out.println(obj); } public static void main(String[] args){ method_get(); }}
判断
字符串中是否包含某一个子串
boolean contains(str);//indexOf(str)返回值为-1时表示字符串中不存在str,因此也可用于判断//该方法既可以返回位置,又可以用于判断
字符串中自否有内容
boolean isEmpty();//即判断长度是否为0
字符串是否是以指定内容开头
boolean stratsWith(str);
字符串是否是以指定内容结尾
boolean endsWith(str);
字符串内容是否相同
boolean equals(str);//覆写Object类的equals方法boolean equalsIgnoreCase();//忽略大小写
练习
class StringMethodDemo{ public static void method_is(){ String str="ArrayDemo.java"; sop(str.startsWith("Array")); sop(str.endsWith("java")); sop(str.contains("Demo")); } public static void sop(Object obj){ System.out.println(obj); } public static void main(String[] args){ method_is(); }}
转换
将字符数组转换为字符串
构造函数:String(char[]) String(char[],offset,count)//将字符数组中的一部分转成字符串静态方法:static String copyValueOf(char[]); static String copyValueOf(char[],int offset,int count) static String valueOf(char[]);
将字符串转换成字符数组**
char[] toCharArray();
将字节数组转换成字符串
String(byte[]);String(byte[],offset,count);
将字符串转换成字节数组
byte[] getBytes();
将基本数据类型转换成字符串
String valueOf(int);String valueOf(double);
**字符串和字节数组在转换过程中,可以指定编码表
练习
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 x=0;x
切割和替换
替换
String replace(oldchar,newchar);//如果返回的字符不存在,则返回原串
切割
String[] split(regex)
子串:获取字符串中的一部分
String substring(begin);//从指定位置开始到结尾String substring(begin,end);//包含头,不包含尾
练习
//获取子串 public static void method_sub(){ String s="asdfghj"; sop(s.substring(2)); sop(s.substring(2,4)); } //切割和替换 public static void method_split(){ String s="zhangsan,lisi,wangwu"; String[] arr=s.split(","); for(int x=0;x
转换,去空格,比较
经字符串转成大/小写
String toUpperCase();String tolowerCase();
去除字符串两段多余空格
String trim();
对两个字符串进行自然顺序的比较
int compareTo(string);//相等返回0,小于返回负数,大于返回正数
练习
public static void method7(){ String s=" Hellow Java "; sop(s.toUpperCase()); sop(s.toLowerCase()); sop(s.trim()); String s1="abc"; String s2="aaa"; sop(s1.compareTo(s2)); }
字符串总练习
1.模拟一个trim方法,去除字符串两端的空格
/* 思路:1.判断字符串第一个位置是否是空格,如果是继续向下判断,知道不是空格为止2.当开始和结尾都判断到不是空格时,就是要获取的字符串 */class StringTest{ public static void sop(String str){ System.out.println(str); } public static String myTrim(String str){ int start=0,end=str.length()-1; while(start<=end&&str.charAt(start)==' '){ start++; } while(start<=end&&str.charAt(end)==' '){ end--; } return str.substring(start,end+1); } public static void main(String[] args){ String s=" ab cd "; sop("("+s+")"); s=myTrim(s); sop("("+s+")"); }}
2.将一个字符串进行反转,将字符串中指定部分进行反转,“abcdefg”;abfedcg
Ver1.0 全部反转
/*思路: 1.类似对数组的元素进行反转 2.将字符串变成数据,对数组反转 3.将反转后的数组变成字符串 4,只要将未反转的部分的开始和结束位置作为参数传递即可 */ 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
Ver2.0 部分反转
public static String reverseString(String s,int start,int end){ char [] chs=s.toCharArray(); reverse(chs,start,end); return new String(chs); } public static String reverseString(String s){ return ""; } private static void reverse(char[] arr,int x,int y){ for(int start=x,end=y-1;start
Ver3.0 整合代码
public static String reverseString(String s,int start,int end){ char [] chs=s.toCharArray(); reverse(chs,start,end); return new String(chs); } public static String reverseString(String s){ return reverseString(s,0,s.length()); } private static void reverse(char[] arr,int x,int y){ for(int start=x,end=y-1;start
3.获取一个字符串在另一个字符串中出现的次数
方法一
/* 思路: 1.定义个计数器 2.获取kk第一次出现的位置 3.从第一次出现位置后剩余字符串中继续获取 4.当不再获取时,定义完成 */ public static int getSubCount(String str,String key){ int count=0; int index=0; while((index=str.indexOf(key))!=-1){ sop("str="+str); str=str.substring(index+key.length()); count++; } return count; }
方法二
public static int getSubCount2(String str,String key){ int count=0; int index=0; while((index=str.indexOf(key,index))!=-1){ sop("index="+index); index=index+key.length(); count++; } return count; }
4.获取两个字符串中最大相同子串
/*思路: 1.讲短的串按照长度递减的方式获取到 2.将每获取到的字串去长传中判断是否包含 如果包含,已经找到 */ public static String getMaxSubString(String s1,String s2){ String max="",min=""; max=(s1.length()>s2.length())?s1:s2; min=max==s1?s2:s1; sop("max="+max+"...min="+min); for(int x=0;x