Java学习日志(13-1-String类常见操作)
博客专区 > Almon 的博客 > 博客详情
Java学习日志(13-1-String类常见操作)
Almon 发表于1年前
Java学习日志(13-1-String类常见操作)
  • 发表于 1年前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

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<chs.length;x++){
			sop("ch="+chs[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<arr.length;x++){
			sop(arr[x]);
		}
	}
	public static void method_replace(){
		String s="hellow java";
		//String s1=s.replace('a','n');
		String s1=s.replace("java","world");
		sop("s="+s);
		sop("s1="+s1);
	}

转换,去空格,比较

    经字符串转成大/小写

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<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;
	}

    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<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;
	}

    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<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.获取一个字符串在另一个字符串中出现的次数

    方法一

	/* 思路:
	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<min.length();x++){
			for(int y=0,z=min.length()-x;z!=s2.length()+1;y++,z++){
				String temp=min.substring(y,z);
				// sop(temp);
				if(max.contains(temp)){
					return(temp);
				}
			}
		}
		return null;
	}

 

共有 人打赏支持
粉丝 2
博文 64
码字总数 44346
×
Almon
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: