黑马程序员——String类及其常见操作

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、什么是String类

String的英文释义为字符串,顾名思义,是指数字、字母以及其他各类符号的随机组合序列。在java语言里,String类作为一个类类型变量而存在,封装着计算机处理字符组合的各种常见方法。


二、String类的特性

String的类对象位于内存结构的常量池中,一旦初始化就不能被改变。

public class demo {
	public static void main(String[] args){
		
		//创建字符串对象abc,并将其赋给变量s
		String s ="abc";  
		
		//将字符串abc的a替换为d,并赋给变量s1
		String s1=s.replace('a', 'd');
		
		System.out.println(s); //打印s结果为abc
		System.out.println(s1);//打印s1结果为dbc
	}
}

 
 

如上述代码,s指向的字符串abc在执行完替换操作后,打印s结果仍为abc,证明字符串abc执行完替换操作后生成了一个新的字符串对象dbc,原对象保持不变。

三、String的常见操作方法

1 获取

int length():该方法可以获取字符串的长度,要与数组的length区分开来,数组的length是属性没有括号。

char charAt(int index):该方法可以根据位置获取该位置上的字符

int indexOf(int ch):该方法可以根据字符获取字符第一次出现的位置,int ch是指字符的ASCII码值

int indexOf(int ch,fromIndex):从指定位置开始寻找,获取字符第一次出现的位置

int indexOf(String str):该方法用于获取某一子串第一次出现的位置

int indexOf(String str,fromIndex):从指定位置开始寻找,获取某一子串第一次出现的位置

int lastIndexOf():该方法用于从最后一位开始寻找字符出现的位置,其重载方法与上同不再赘述

2 判断

boolean isEmpty() :用于判断字符串是否为空

boolean startsWith(String str) :用于判断字符串是否以某个词组开头

boolean endsWith(String str) :用于判断字符串是否以某个词组结尾

boolean equals(String str) :复写了object类的equals方法,不再比较对象的地址值,用于比较两个字符串的内容是否相同

boolean equalsIgnoreCase(String str) :与上同,但比较内容的时候忽略大小写

3 转换

   3.1字符数组与字符串的互相转换

String(char[] arr):将字符数组转换为字符串,通过String的构造函数完成,示例如下。

class Demo{
	public static void main(String[] args){
		char[] arr ={'a','b','c','d','e'};
		
		//构造字符串对象的时候直接接收了arr数组,并将其元素转换为字符串
		String str =new String(arr);
		System.out.println(str);//打印结果为abcde
		
		//接收arr数组,并从第二个角标位开始,将3个长度的元素变为字符串
		String str2 =new String(arr,2,3);
		System.out.println(str2);	//打印结果为cde
	}
}
String(char[] arr,int offset,int count):将字符数组的某一部分转换为字符串,通过String的有参构造函数完成,示例如上。

static String copyValueOf(char[] arr):复制某一字符数组中所有元素的值并生成字符串

static String copyValueOf(char[] arr,int offset,int count):复制某一字符数组中指定元素的值并生成字符串

static String ValueOf(Char[] arr):接收某一字符数组中所有元素的值并生成字符串

char[] toCharArray():将字符串转换为字符数组

3.2数组与字符串的互相转换    

String(byte[] arr):

String(byte[] arr,int offset,int count):

byte[]  getBytes():

............

与字符数组的转换相似,不再赘述。特殊之处:字节数组与字符串互相转换时,可以指定编码表

3.3将基本数据类型转换为字符串

String ValueOf(int)

                String ValueOf(boolean)

String ValueOf(double)

...........

4 替换

String replace(char oldChar,char newChar):将原字符oldChar替换为新字符newChar,需要注意,替换后内存中会生成一个新的字符串

5 切割

String[] split(" "):用字符或字符串对原字符串进行切割,生成一个字符串数组。特别注意,返回的是字符串数组而不是字符串!

String[] split(regex):按照正则表达式指定的规则对原字符串进行切割,生成一个字符串数组。特别注意,返回的是字符串数组而不是字符串!

6 子串

String substring(int begin):从指定位置begin开始,到原字符串结尾位置,截取生成一个新的字符串

String substring(int begin,int end):从指定位置begin开始,到指定位置end为止,截取生成一个新的字符串,需要注意:包含头不包含尾!

7 其他常用

7.1大小写转换

String toUpperCase();

String toLowerCase();

7.2 去除空格

String trim();

7.3 与另一个字符串进行自然顺序的比较

int compareTo(String str):如果返回值是0表示自然顺序相同,如果是负数表示this的自然顺序在前面,如果是正数表示this的自然顺序在后面

四、三个常见的字符串编程场景

1.去除字符串两端的空格

class demo {
	public static void main(String[] args){
		String s ="---abcdef-----";
		System.out.println(s);
		String s1 =myTrim(s);
		System.out.println(s1);
	}
	
	//封装一个用于去除字符串两端空格的方法myTrim()
	public static String myTrim(String str){
		int begin =0;
		int end   =str.length()-1;
		char ch   =str.charAt(begin);
		while(begin<=end&&ch=='-')//当begin所代表的位置不为'-'时循环结束
					begin++;
		while(begin<=end&&end=='-')//当end所代表的位置不为'-'时循环结束
					end--;
		return str.substring(begin,end+1);//利用String的substring方法得到需求字符串
	}			
}		

2.统计一个字符串在另一个字符串中出现的次数

/*
 *需求:统计"kk"在"abckkdefgkkhijkklmnkkop"出现的次数
 *思路:
 *1.定义一个计数器,每找到一个"kk"就记录一次
 *2.利用String的indexOf(String str,int fromIndex)寻找"kk"
 *3.发现寻找"kk"的过程是一个循环过程
 *4.敲写代码
 */
package com.itheima;

public class Demo {
	public static void main(String[] args){
		String str = "abckkdefgkkhijkklmnkkop";//定义一个大字符串
		String str2= "kk";//定义一个小字符串
		int count  = getSubCount(str,str2);//调用getSubCount方法
		System.out.println("kk出现的次数为:"+count);
	}
	
	//定义一个getSubCount方法,用于返回小字符串在大字符串中出现的次数
	public static int getSubCount(String str,String key){
		int count  =0;
		int index  =0;
		while(str.indexOf(key, index)!=-1){ //循环判断大字符串中是否还有小字符串
			index =str.indexOf(key,index)+key.length();//改变搜索的起始位置
			count++;
		}
		return count;
	}
	
}


3.判断两个字符串的最大相同部分

/*
 *需求:判断两个字符串"abcdefhihellojavajava"和"dcbahellop"的最大相同部分
 *思路:
 *1.对短串进行逐一减位,判断是否包含在长串中
 *2.短串每减一位,都有好多种子串情况,想到嵌套for循环
 *3.开始敲代码
 */
package com.itheima;

public class Demo {
	public static void main(String[] args){
		String str  = "abcdefhihellojavajava";
		String str2 = "dcbahellop";
		System.out.println(getMaxSub(str,str2));
	}
	public static String getMaxSub(String s1,String s2){
		
		//对传进来的两个字符串进行长短串判别
		String shor =(s1.length()<=s2.length())?s1:s2;
		String lon  =(s1==shor)?s2:s1;
		
		
		//双重for循环遍历出最大相同子串
		for(int x=0;x<shor.length();x++){
			for(int y=0,z=shor.length()-x;z!=shor.length()+1;y++,z++){
				if(lon.contains(shor.substring(y,z)));
					return shor.substring(y,z);
			}
		}
		
		
		//遍历完如果没有返回值则返回没有交集
		return "没有交集";
	}
}
	


4.反转字符串

/*
 *需求:反转字符串"abcdefghi"
 *思路:
 *1.将字符串转换为char[]
 *2.对数组进行反转
 *3.将反转后的数组变为字符串
 */
package com.itheima;

public class Demo {
	public static void main(String[] args){
		String str = "abcdefghi";
		char[] arr = str.toCharArray();
		String str2=new String(reverse(arr));
		System.out.println(str2);
	}
	
	//定义一个数组反转的方法reverse
	public static char[] reverse(char[] arr){
		for(int x=0,y=arr.length-1;x<y;x++,y--){ //按照0角标递增1同时尾角标递减1的规则遍历数组
			swap(arr[x],arr[y]);              //让两个角标所代表的字符交换位置
		}
		return arr;
	}
	
	//定义一个字符交换位置的方法swap
	public static void swap(char x,char y){
		char temp = x;
		x         = y;
		y         = temp;
	}
}
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值