黑马程序员——String类

黑马程序员--String类

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

String类

一、定义

String类:用于描述字符串事物的类。

二、特点

1、字符串是一个特殊的对象;
2、一旦初始化就不可以被改变,相同字符串不会被重复创建;
3、String类复写了Object中equals方法,用于比较字符串内容是否相同,不比较地址;
4、String s1 = "abc";(s1是一个类类型变量,"abc"是一个对象)和String s2 = new String("abc");区别:
s1在内存中有一个对象;s2在内存中有两个对象new、"abc"。

三、常见功能

一个对象的功能一般有四部分:增、读、改、删(C create R read U update D delete)。
1、获取
1.1 int length():获取字符串的长度(个数)。 
1.2 char charAt(int index):根据位置获取字符。 
1.3根据字符获取该字符在字符串中的位置
int indexOf(int ch):返回指定字符在字符串中第一次出现的索引(位置)。
int indexOf(int ch,int fromIndex):从指定的索引处开始,获取指定字符在字符串中出现的索引。
int indexOf(String str):返回第一次出现的指定子字符串在此字符串中的索引。
int indexOf(String str,int fromIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
int lastIndexOf(int ch):返回最后一次出现的指定字符在此字符串中的索引。
1.4获取字符串中一部分字符串(子串)。
String substring(int beginIndex):从指定位置开始到结尾,如果角标不存在,会出现字符串角标越界异常。
String substring(int beginIndex,int endIndex):含头不含尾。
  1. //字符串中,返回-1代表被访问字符串中没有标的字符(串)。   
  2. class StringGet  
  3. {  
  4.     public static void get()  
  5.     {  
  6.         String str = "abcdafg";  
  7.   
  8.         //获取长度(个数)   
  9.         sop(str.length());  
  10.   
  11.         //根据索引获取字符。当访问到字符串中不存在的角标时会发生:StringIndexOutOfBoundsException。   
  12.         sop(str.charAt(4));  
  13.   
  14.         //返回字符第一个出现索引(位置)。   
  15.         sop(str.indexOf('d'));  
  16.   
  17.         //根据字符从指定索引开始,获取目标索引。   
  18.         sop(str.indexOf('t',3));  
  19.   
  20.         //返回自字符串索引。   
  21.         sop(str.indexOf("fg"));  
  22.   
  23.         //从指定索引开始,返回首次出现的字符串索引。   
  24.         sop(str.indexOf("da",3));  
  25.   
  26.         //索引一个字符最后出现的索引。   
  27.         sop(str.lastIndexOf('a'));  
  28.   
  29.         //获取字符串中的一部分字符串(子串)。   
  30.         sop(str.substring(3));  
  31.         sop(str.substring(3,5));  
  32.     }  
  33.     public static void main(String[] args)  
  34.     {  
  35.         get();  
  36.     }  
  37.     public static void sop(Object obj)  
  38.     {  
  39.         System.out.println(obj);  
  40.     }  
  41. }  
//字符串中,返回-1代表被访问字符串中没有标的字符(串)。
class StringGet
{
	public static void get()
	{
		String str = "abcdafg";

		//获取长度(个数)
		sop(str.length());

		//根据索引获取字符。当访问到字符串中不存在的角标时会发生:StringIndexOutOfBoundsException。
		sop(str.charAt(4));

		//返回字符第一个出现索引(位置)。
		sop(str.indexOf('d'));

		//根据字符从指定索引开始,获取目标索引。
		sop(str.indexOf('t',3));

		//返回自字符串索引。
		sop(str.indexOf("fg"));

		//从指定索引开始,返回首次出现的字符串索引。
		sop(str.indexOf("da",3));

		//索引一个字符最后出现的索引。
		sop(str.lastIndexOf('a'));

		//获取字符串中的一部分字符串(子串)。
		sop(str.substring(3));
		sop(str.substring(3,5));
	}
	public static void main(String[] args)
	{
		get();
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
运行结果:

2、判断
boolean contains(String str):字符中是否包含某一个字符串。
indexOf()用if(str.indexOf("aa")!=-1)语句,既可以判断,又可以获取出现的位置。
boolean isEmpty():字符中是否有内容。原理就是判断长度是否为0。
boolean startsWith(str):字符串是否以指定内容开头。
boolean endsWith(str):字符串是否以指定内容结尾。
boolean equals(str):判断字符串内容是否相同。
boolean equalsIgnoreCase():判断内容是否相同,并忽略大小写。

  1. class StringJudge  
  2. {  
  3.     public static void judge()  
  4.     {  
  5.         String str = "ArrayDemo.java";  
  6.   
  7.         //判断文件名称是否包含Demo。   
  8.         sop(str.contains("Demo"));  
  9.   
  10.         //用indexOf()判断   
  11.         sop(str.indexOf("rra")!=-1);  
  12.   
  13.         //是否为空字符   
  14.         sop(str.isEmpty());  
  15.   
  16.         //判断文件名称是否以Array单词开头。   
  17.         sop(str.startsWith("Array"));  
  18.         //判断文件名称是否是.java的文件。   
  19.         sop(str.endsWith(".java"));  
  20.   
  21.         String str1 = "ARRAYDEMO.JAVA";  
  22.   
  23.         //判读是否有相同内容   
  24.         sop(str1.equals(str));  
  25.         //忽略大小写   
  26.         sop(str1.equalsIgnoreCase(str));  
  27.     }  
  28.     public static void main(String[] args)   
  29.     {  
  30.         judge();  
  31.     }  
  32.     public static void sop(Object obj)  
  33.     {  
  34.         System.out.println(obj);  
  35.     }  
  36. }  
class StringJudge
{
	public static void judge()
	{
		String str = "ArrayDemo.java";

		//判断文件名称是否包含Demo。
		sop(str.contains("Demo"));

		//用indexOf()判断
		sop(str.indexOf("rra")!=-1);

		//是否为空字符
		sop(str.isEmpty());

		//判断文件名称是否以Array单词开头。
		sop(str.startsWith("Array"));
		//判断文件名称是否是.java的文件。
		sop(str.endsWith(".java"));

		String str1 = "ARRAYDEMO.JAVA";

		//判读是否有相同内容
		sop(str1.equals(str));
		//忽略大小写
		sop(str1.equalsIgnoreCase(str));
	}
	public static void main(String[] args) 
	{
		judge();
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
运行结果:

3、转换
3.1将字符数数组转成字符串
构造函数 String(char[]){}
String(char[],offset,count) 将字符数组中的一部分转成字符串。
静态方法 

static String copyValueOf(char[] date):返回指定数组中表示该字符序列的字符串。
static String copyValueOf(char[] data,int offset,int count);
static String valueOf(char[] date):返回指定数组参数的字符串表示形式。
3.2将字符串转成字符数组
char[] toCharArray();
3.3将字节数组转成字符串
String(byte[]);
String(byte[],offset,count):将字节数组中的一部分转成字符串。
3.4将字符串转成字节数组
byte[]  getBytes();
3.5将基本数据类型转成字符串(此处都是String的方法,首单词要小写)
static String valueOf(int) 
static String valueOf(double) 
3+""==String.valueOf(3)
特殊:字符串和字节数组在转换过程中是可以指定编码表的。
3.6将字符串转成大写或小写
String toUpperCase();
String toLowerCase();
3.7将字符串两端的多个空格去除
String trim();

  1. //因为调用了String类,所以要导入对应包。   
  2. import java.lang.String.*;  
  3.   
  4. class StringTransform  
  5. {  
  6.     public static void transform()  
  7.     {  
  8.         char[] arr = {'a','b','c','d','e','f'};  
  9.   
  10.         //从角标1开始,获取三个字符。   
  11.         String s = new String(arr,1,3);  
  12.         sop("s="+s);  
  13.   
  14.         //返回指定数组中表示该字符序列的字符串   
  15.         String str1 = String.copyValueOf(arr);  
  16.         sop("str1="+str1);  
  17.   
  18.         //返回指定数组参数的字符串表示形式。   
  19.         String str2 = String.valueOf(arr);  
  20.         sop("str2="+str2);  
  21.           
  22.         String s1 = "afegvfee";  
  23.         //字符串转字符数组   
  24.         char[] chs = s1.toCharArray();  
  25.         for(int x=0; x<chs.length;x++)  
  26.         {  
  27.             System.out.print(("ch="+chs[x]+"  "));  
  28.         }  
  29.         System.out.println();  
  30.   
  31.         byte[] bt1 = {1,2,3};  
  32.         //将字节数组转成字符串   
  33.         String str3 = new String(bt1);  
  34.         sop("str3="+str3);  
  35.   
  36.         //字符串转字节数组   
  37.         byte[] bt2 = s1.getBytes();  
  38.         for(int x=0; x<bt2.length;x++)  
  39.         {  
  40.             System.out.print(("by="+bt2[x]+"  "));  
  41.         }  
  42.         System.out.println();  
  43.           
  44.         //将基本数据类型转成字符串   
  45.         String str4 = String.valueOf(20);  
  46.         sop("str4"+str4+(3+""==String.valueOf(3)));  
  47.   
  48.         String str5 = "    Hello Java     ";  
  49.           
  50.         sop(str5.toLowerCase());  
  51.         sop(str5.toUpperCase());  
  52.         sop(str5.trim());  
  53.     }  
  54.     public static void main(String[] args)   
  55.     {  
  56.         transform();  
  57.     }  
  58.     public static void sop(Object obj)  
  59.     {  
  60.         System.out.println(obj);  
  61.     }  
  62. }  
//因为调用了String类,所以要导入对应包。
import java.lang.String.*;

class StringTransform
{
	public static void transform()
	{
		char[] arr = {'a','b','c','d','e','f'};

		//从角标1开始,获取三个字符。
		String s = new String(arr,1,3);
		sop("s="+s);

		//返回指定数组中表示该字符序列的字符串
		String str1 = String.copyValueOf(arr);
		sop("str1="+str1);

		//返回指定数组参数的字符串表示形式。
		String str2 = String.valueOf(arr);
		sop("str2="+str2);
		
		String s1 = "afegvfee";
		//字符串转字符数组
		char[] chs = s1.toCharArray();
		for(int x=0; x<chs.length;x++)
		{
			System.out.print(("ch="+chs[x]+"  "));
		}
		System.out.println();

		byte[] bt1 = {1,2,3};
		//将字节数组转成字符串
		String str3 = new String(bt1);
		sop("str3="+str3);

		//字符串转字节数组
		byte[] bt2 = s1.getBytes();
		for(int x=0; x<bt2.length;x++)
		{
			System.out.print(("by="+bt2[x]+"  "));
		}
		System.out.println();
		
		//将基本数据类型转成字符串
		String str4 = String.valueOf(20);
		sop("str4"+str4+(3+""==String.valueOf(3)));

		String str5 = "    Hello Java     ";
		
		sop(str5.toLowerCase());
		sop(str5.toUpperCase());
		sop(str5.trim());
	}
	public static void main(String[] args) 
	{
		transform();
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
运行结果:

4、其他功能

4.1替换 
String replace(char oldCh,char newCh):建立一个新字符串。
String replace(String s1,String s2);
若未找到替换内容,则返回原字符串。
4.2切割 
String[] split(regex);涉及都正则表达式(正则表达式就是字符串的使用的快捷方式)。
4.3对两个字符串进行自然顺序的比较
int compareTo(string):按字典顺序比较两个字符串。

  1. class StringOthers  
  2. {  
  3.     //注意命名要防止和方法重名   
  4.     public static void method_replace()  
  5.     {  
  6.         String s = "hello java";  
  7.   
  8.         //建立一个新字符串,旧字符串一旦建立不能被改变。   
  9.         String s1 = s.replace('a','n');  
  10.         //如果要替换的字符不存在,返回原串。   
  11.         String s2 = s.replace('q','n');  
  12.           
  13.         //替换部分字符串。   
  14.         String s3 = s.replace("java","world");  
  15.           
  16.         sop("s="+s);  
  17.         sop("s1="+s1);  
  18.         sop("s2="+s2);  
  19.         sop("s3="+s3);  
  20.     }  
  21.     public static void method_split()  
  22.     {  
  23.         String s = "zhangsan,lisi,wangwu";  
  24.           
  25.         //依据","进行切割   
  26.         String[] arr = s.split(",");  
  27.   
  28.         for(int x=0;x<arr.length;x++)  
  29.         {  
  30.             System.out.print((arr[x]+" "));  
  31.         }  
  32.         //换行   
  33.         System.out.println();  
  34.     }  
  35.     public static void method_compare()  
  36.     {  
  37.         String s1 = "bcz";  
  38.         String s2 = "bcd";  
  39.   
  40.         //按字典顺序比较两个字符串。   
  41.         //若字符串相同,返回0;若s1>s2,返回正数;s1<s2,返回负数;   
  42.         sop(s1.compareTo(s2));  
  43.     }  
  44.     public static void main(String[] args)   
  45.     {  
  46.         method_replace();  
  47.         method_split();  
  48.         method_compare();  
  49.     }  
  50.     public static void sop(Object obj)  
  51.     {  
  52.         System.out.println(obj);  
  53.     }  
  54. }  
class StringOthers
{
	//注意命名要防止和方法重名
	public static void method_replace()
	{
		String s = "hello java";

		//建立一个新字符串,旧字符串一旦建立不能被改变。
		String s1 = s.replace('a','n');
		//如果要替换的字符不存在,返回原串。
		String s2 = s.replace('q','n');
		
		//替换部分字符串。
		String s3 = s.replace("java","world");
		
		sop("s="+s);
		sop("s1="+s1);
		sop("s2="+s2);
		sop("s3="+s3);
	}
	public static void method_split()
	{
		String s = "zhangsan,lisi,wangwu";
		
		//依据","进行切割
		String[] arr = s.split(",");

		for(int x=0;x<arr.length;x++)
		{
			System.out.print((arr[x]+" "));
		}
		//换行
		System.out.println();
	}
	public static void method_compare()
	{
		String s1 = "bcz";
		String s2 = "bcd";

		//按字典顺序比较两个字符串。
		//若字符串相同,返回0;若s1>s2,返回正数;s1<s2,返回负数;
		sop(s1.compareTo(s2));
	}
	public static void main(String[] args) 
	{
		method_replace();
		method_split();
		method_compare();
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
运行结果:

StringBuffer

一、定义

StringBuffer:是字符串缓冲区,用于存储数据的容器。 

二、特点

1、长度可变化; 
2、可以存储不同类型数据; 
3、最终要转成字符串才能使用。

三、优点

StringBuffer可对字符串修改;string类一旦建立无法修改。

PS:
StringBuffer的字符串缓冲区初始容量为16个字符,其实质还是数组。

四、常见功能

1、添加:
StringBuffer append(date):将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,date):可以将数据插入到指定index位置。
2、删除
StringBuffer delete(int start,int end):删除缓冲区中的数据,含头不含尾。
StringBuffer deleteCharAt(int index):删除指定位置的字符。
3、获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)
4、修改
StringBuffer replace(int start,int end,String str);
void setCharAt(int index,char ch);
5、反转
StringBuffer reverse();
6、其他方法
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):将缓冲区中指定数据存储到指定字符数组中。
src:源 dst:目的
void setLength(int newLength):设置字符序列的长度

  1. class StringBufferDemo  
  2. {  
  3.     public static void method_add()  
  4.     {  
  5.         StringBuffer sb = new StringBuffer();  
  6.         //sb添加后并使sb1指向的是同一个对象,故sb==sb1。   
  7.         StringBuffer sb1 = sb.append(34);  
  8.         sop("sb==sb1:"+(sb==sb1));  
  9.   
  10.         //方法调用链,返回字符串链。   
  11.         sb.append("ass").append(true).append(34);  
  12.         sop("sb="+sb);  
  13.   
  14.         //将数据插入到指定7上。   
  15.         sb.insert(7,"qq");  
  16.         sop(sb.toString());  
  17.     }  
  18.     public static void method_del()  
  19.     {  
  20.         StringBuffer sb = new StringBuffer("abcdf");  
  21.       
  22.         sb.delete(1,3);  
  23.   
  24.         //清空缓冲区   
  25.         //sb.delete(0,sb.length());   
  26.   
  27.         //删除一个字符的用法。跟sb.delete(1,2);效果相同。sb.delete(1,1);无效。   
  28.         //sb.deleteCharAt(2);   
  29.         sop(sb.toString());   
  30.     }  
  31.     public static void method_update()  
  32.     {  
  33.         StringBuffer sb = new StringBuffer("abcdf");  
  34.       
  35.         //sb.replace(1,3);   
  36.   
  37.         sb.setCharAt(2,'K');//void   
  38.         sop(sb.toString());   
  39.     }  
  40.     public static void main(String[] args)  
  41.     {  
  42.         method_add();  
  43.         method_del();  
  44.         method_update();  
  45.     }     
  46.     public static void sop(String str)  
  47.     {  
  48.         System.out.println(str);  
  49.     }  
  50. }  
class StringBufferDemo
{
	public static void method_add()
	{
		StringBuffer sb = new StringBuffer();
		//sb添加后并使sb1指向的是同一个对象,故sb==sb1。
		StringBuffer sb1 = sb.append(34);
		sop("sb==sb1:"+(sb==sb1));

		//方法调用链,返回字符串链。
		sb.append("ass").append(true).append(34);
		sop("sb="+sb);

		//将数据插入到指定7上。
		sb.insert(7,"qq");
		sop(sb.toString());
	}
	public static void method_del()
	{
		StringBuffer sb = new StringBuffer("abcdf");
	
		sb.delete(1,3);

		//清空缓冲区
		//sb.delete(0,sb.length());

		//删除一个字符的用法。跟sb.delete(1,2);效果相同。sb.delete(1,1);无效。
		//sb.deleteCharAt(2);
		sop(sb.toString());	
	}
	public static void method_update()
	{
		StringBuffer sb = new StringBuffer("abcdf");
	
		//sb.replace(1,3);

		sb.setCharAt(2,'K');//void
		sop(sb.toString());	
	}
	public static void main(String[] args)
	{
		method_add();
		method_del();
		method_update();
	}	
	public static void sop(String str)
	{
		System.out.println(str);
	}
}
运行结果:

PS:

1、使用setLength设置StringBuffer中字符序列的长度。
如果小于已有字符序列的长度,多余部分将被清除;如果大于,多余部分用空字符填充。
2、当创建的StringBuffer内容长度大于16,将会创建一个较长的新数组。
也可以通过StringBuffer(int capacity);构造函数自己设置StringBuffer缓冲区长度。

五、StringBuilder

StringBuilder是JDK1.5版本后StringBuffer的替代品。StringBuilder用法和StringBuffer完全一样。

区别:
StringBuffer是线程同步的,通常用于多线程。在添加时,不能做其他操作。但单线程时效率低。
StringBuilder是线程不同步。开发中建议使用StringBuilder。因为不用同步,效率高,但是多线程时不安全。

PS:
一、升级三个要素:提高安全性、提高效率、简化书写;
二、基本数据类型对象包装类:把基本数据类型封装成对象,便于操作。

2、常见操作:基本数据类型和字符串类型之间的转换。
2.1将基本数据类型转成字符串。
a.基本数据类型+"";
b.基本数据类型.toString(基本数据类型值);
例:Integer.toString(34); //将34整数转换成"34"。
2.2将字符串转成基本数据类型
a.静态转换方法:xxx a = Xxx.parseXxx(String);
例:int a = Integer.parseInt("a123");//NumberFormatException。必须传入数字格式的字符串
b.非静态:
Integer i = new Integer("123");
int num = i.intaValue();
3、常见方法
3.1十进制转成其他进制:
toBinaryString();
toHexString();
toOctalString();
3.2其他进制转成十进制:
parseInt(string,radix);radix:要转的进制数,string:标的字符串。
例:int x = Integer.parseInt("3c",16);///~60

  1. class IntegerDemo  
  2. {  
  3.     public static void sop(String str)  
  4.     {  
  5.         System.out.println(str);  
  6.     }  
  7.     public static void main(String[] args)  
  8.     {  
  9.         //基本数据类型转字符串   
  10.         String s = 10 + "";  
  11.         sop(s);  
  12.         sop(Integer.toString(34));  
  13.   
  14.         //将一个字符串转成整数(静态方法)。   
  15.         //int num = Integer.parseInt("a23");//NumberFormatException。必须传入数字格式的字符串   
  16.         double b = Double.parseDouble("12.23");  
  17.         sop("double="+b);  
  18.   
  19.         //非静态方法   
  20.         Integer i = new Integer("123");  
  21.         sop("i="+i);  
  22.   
  23.     //常用方法:   
  24.         //整数类型的最大值   
  25.         sop("int max :"+Integer.MAX_VALUE);  
  26.   
  27.         //十进制转二进制:   
  28.         sop(Integer.toBinaryString(-6));  
  29.         //十进制转十六进制   
  30.         sop(Integer.toHexString(60));  
  31.   
  32.         //其他进制转成十进制:   
  33.         int x = Integer.parseInt("3c",16);//括号里是(原数据,要转变的原数据进制);   
  34.         sop("x="+x);  
  35.     }  
  36. }  
class IntegerDemo
{
	public static void sop(String str)
	{
		System.out.println(str);
	}
	public static void main(String[] args)
	{
		//基本数据类型转字符串
		String s = 10 + "";
		sop(s);
		sop(Integer.toString(34));

		//将一个字符串转成整数(静态方法)。
		//int num = Integer.parseInt("a23");//NumberFormatException。必须传入数字格式的字符串
		double b = Double.parseDouble("12.23");
		sop("double="+b);

		//非静态方法
		Integer i = new Integer("123");
		sop("i="+i);

	//常用方法:
		//整数类型的最大值
		sop("int max :"+Integer.MAX_VALUE);

		//十进制转二进制:
		sop(Integer.toBinaryString(-6));
		//十进制转十六进制
		sop(Integer.toHexString(60));

		//其他进制转成十进制:
		int x = Integer.parseInt("3c",16);//括号里是(原数据,要转变的原数据进制);
		sop("x="+x);
	}
}
运行结果:

三、JDK1.5版本后的2个新特性:
1、Integer x = 4;//自动装箱
2、当数值在byte范围内时,如果该数值已经存在,则不会再开辟新的空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值