【JavaSE笔记】Java常用类及其方法(二)_String

本期知识点:
String类的常用方法

类 String

String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

字符串的特点:

a. 字符串一旦被赋值,其值不能再改变。
b. 方法区:有一个内存区域:字符串常量池。如果我们创建一个字符串对象,给对象赋值,这个值会在常量池进行寻找,有则返回;没有那么就在常量池开辟空间。
例:
		public class StringDemo {
			public static void main(String[] args) {
				//创建字符串对象
				String s = "hello" ;
				s += "world" ;
				System.out.println("s:"+s);//hellowrld
			}
}

(面试题):

String s1 = new String("Hello");创建了几个对象?
String s2 = "Hello";创建了几个对象?

s1创建了两个对象。
s2创建了一个对象,直接指向常量池中的。


1. 常用构造方法

a. public String()   无参构造
b. public String(byte[] bytes)   将字节数组转换成字符串
c. public String(byte[] bytes,int offset,int length)   将字节数组的一部分转换成字符串
d. public String(char[] value)   将字符数组转换成字符串
e. public String(char[] value,int offset,int count)   将字符数组的一部分转换成字符串
 f. public String(String original)   将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
例:
		public class Demo01 {
			public static void main(String[] args){
				//public String():无参构造
				String s = new String();
				System.out.println(s);//空字符序列
				System.out.println(s.length());//0;
				System.out.println("--------------------");
				
				//public String(byte[] bytes):将字节数组转换成字符串
				//构造一个字节数组,静态初始化;
				byte[] a = {97,98,99,100,101};
				String s2 = new String(a);
				System.out.println(s2);//abcde;
				System.out.println(s2.length());//5;
				System.out.println("--------------------");
				
				//public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
				String s3 = new String(a,0,3);
				System.out.println(s3);//abc;
				System.out.println(s3.length());//3
				System.out.println("--------------------");
				
				//public String(char[] value):将字符数组转换成字符串
				char[] b = {'L','I','N','K','I','N',' ','P','A','R','K'};
				String s4 = new String(b);
				System.out.println(s4);//LINKIN PARK
				System.out.println(s4.length());//11
				System.out.println("--------------------");
				
				//public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串
				String s5 = new String(b,5,6);
				System.out.println(s5);//N PARK
				System.out.println(s5.length());//6
				System.out.println("--------------------");
				
				//public String(String original):将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
				 String s6 = new String("LinKin Park");
				 System.out.println(s6);
				 System.out.println(s6.length());
				
			}
}


2. 常用的判断功能

a.boolean equals(Object obj)   将此字符串与指定的对象比较 。
b. boolean equalsIgnoreCase(String str)   将此字符串和另一个字符串进行比较,忽略大小写。
c. boolean contains(String str)   判断此字符串中是否包含str这个子字符串。
d. boolean startsWith(String str)   判断是否以str子字符串开头。
e. boolean endsWith(String str)   判断是否已str字符串结尾。
 f. boolean isEmpty()   判断字符串是否为空。
注意:
String s = ''''; //表示s字符串是空字符串
String s = null;//空对象,连对象都没有.
当字符串为null时,会出现NullPointerException:空指针异常,需要加入非空判断。
例:
		public class String类的判断功能 {
			public static void main(String[] args) {
				//定义三个字符串;
				String a = "linkinPark";
				String b = "linkinPark";
				String c = "LinKinPark";
				//boolean equals(Object obj):将此字符串与指定的对象比较 。
				System.out.println(a.equals(b));//true
				System.out.println(a.equals(c));//false
				System.out.println("—————————");
				//boolean equalsIgnoreCase(String str):将此字符串和另一个字符串进行比较,忽略大小写。
				System.out.println(a.equalsIgnoreCase(b));//true
				System.out.println(a.equalsIgnoreCase(c));//true
				System.out.println("—————————");
				//boolean contains(String str):判断此字符串中是否包含str这个子字符串。
				System.out.println(a.contains("Park"));//true
				System.out.println(a.contains("Lin"));//false
				System.out.println("—————————");
				//boolean startsWith(String str):判断是否以str子字符串开头。
				System.out.println(a.startsWith("lin"));//true
				System.out.println(a.startsWith("Lin"));//false
				System.out.println("—————————");
				//boolean endsWith(String str):判断是否已str字符串结尾。
				System.out.println(a.endsWith("Park"));//true
				System.out.println(a.endsWith("park"));//false
				System.out.println("—————————");
				//boolean isEmpty():判断字符串是否为空。
				String e = " ";
				System.out.println(e.isEmpty());//false
				String f = null;//java.lang.NullPointerException
				//加入非空判断
				if(f!=null){
					System.out.println(f.isEmpty());
				}
			}
		}

3. 常用的字符串转换功能

a. byte[] getBytes()   将一个字符串转换字节数组。
b. char[] toCharArray()   将一个字符串转换成字符数组。★
c. static String valueOf(char[] chs)   将字符数组转换成字符串。
d. static String valueOf(int i)   将int类型的数据转换字符串。
注意:String类中的valueOf方法可以将任何数据类型转换成String。
e. String toLowerCase()   将字符串转换成小写。
 f. String toUpperCase()   将字符串转换成大写。
g. String concat(String str)   字符串拼接功能。
例:
		public class String类的转换功能 {
			public static void main(String[] args) {
				//定义一个字符串
				String a = "LinKinPark";
				
				//byte[] getBytes():将一个字符串转换字节数组。
				byte[] s1 = a.getBytes();
				for (int i = 0; i < s1.length; i++) {
					System.out.print(s1[i]+" ");//76 105 110 75 105 110 80 97 114 107 
				}
				System.out.println();
				System.out.println("—————————");
				
				//char[] toCharArray():(重点方法):将一个字符串转换成字符数组。(重点)
				char [] s2 = a.toCharArray();
				for (int i = 0; i < s2.length; i++) {
					System.out.print(s2[i]+" ");//L i n K i n P a r k 
				}
				System.out.println();
				System.out.println("—————————");
				
				// static String valueOf(char[] chs):将字符数组转换成字符串。
				String b = String.valueOf(s2);
				System.out.println(b);//LinKinPark
				System.out.println("—————————");
				
				// tatic String valueOf(int i):将int类型的数据转换字符串。
				//注意:String类中的valueOf方法可以将任何数据类型转换成String。
				int x = 101;
				String c = String.valueOf(x);
				System.out.println(c);//101
				System.out.println("—————————");
				
				// String toLowerCase():将字符串转换成小写。
				// String toUpperCase():将字符串转换成大写。
				System.out.println("小写:"+a.toLowerCase());//小写:linkinpark
				System.out.println("大写:"+a.toUpperCase());//大写:LINKINPARK
				System.out.println("—————————");
				
				//String concat(String str):字符串拼接功能。
				String d = "Imagine";
				String e = "Dragons";
				String f = d.concat(e);
				System.out.println(f);//ImagineDragons
			}
		}


4. 常用的获取功能

a. int length()  获取字符串的长度。
b. char charAt(int index)   返回指定索引处的字符★
c. int indexOf(int ch)   返回回指定字符在此字符串中第一次出现处的索引★

注意:为什么这里的参数是int类型,而不是char类型
'a'和97 都代表'a'
d. int indexOf(String str)  返回指定字符串在此字符串第一次出现的索引
e. int indexOf(int ch,int fromIndex)   返回此字符中从指定位置开始后第一次出现的索引
 f. int indexOf(String str,int fromIndex)   返回此字符串中从指定位置开始后第一次出现的索引★
g. String substring(int beginIndex)   截取:从指定位置开始截取,默认截取到末尾:包含start这个索引
h. String substring(int beginIndex,int endIndex)   从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置.
例:
		public class String类的获取功能 {
			public static void main(String[] args) {
				//定义一个字符串
				String a = "LinkPark";
				//int length():获取字符串的长度。
				System.out.println(a.length());//8
				System.out.println("—————————");
				
				//char charAt(int index):返回指定索引处的字符!(重点)★
				System.out.println(a.charAt(5));//a
				System.out.println("—————————");
				
				//int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引(重点)★
				//注意:为什么这里的参数是int类型,而不是char类型
				//				 'a'和97 都代表'a'
				System.out.println(a.indexOf('P'));//4
				System.out.println(a.indexOf('k'));//3
				System.out.println("—————————");
				
				// int indexOf(String str):返回指定字符串在此字符串第一次出现的索引!
				System.out.println(a.indexOf("in"));//1
				System.out.println(a.indexOf("ar"));//5
				System.out.println("—————————");
				
				//int indexOf(int ch,int fromIndex):返回此字符中从指定位置开始后第一次出现的索引
				System.out.println(a.indexOf('k', 5));//7
				System.out.println("—————————");
				
				//int indexOf(String str,int fromIndex):返回此字符串中从指定位置开始后第一次出现的索引★
				System.out.println(a.indexOf("ar", 4));//5
				System.out.println("—————————");
				
				// String substring(int beginIndex):截取:从指定位置开始截取,默认截取到末尾:包含start这个索引
				System.out.println(a.substring(4));//Park
				System.out.println("—————————");
				
				// String substring(int beginIndex,int endIndex):从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置.
				System.out.println(a.substring(2, 6));//nkPa
			}
}


5. String类其他功能

a. 替换功能:
String replace(char old,char new):将老的字符替换成一个新的字符。

String replace(String old,String new) :替换字符串。


b. 去除字符串两空格:

String trim()


c. 按字典的顺序比较两个字符串。
String comparaTo(String str)
例:
			public class String类的其他功能_替换和去除空格 {
				public static void main(String[] args) {
					//定义一个字符串
					String a = "LinkinPark";
					//String replace(char old,char new):将老的字符替换成一个新的字符。
					String b = a.replace('k', 'W');
					System.out.println(b);//LinWinParW
					System.out.println("—————————");
					//String replace(String old,String new):替换字符串。
					String c = a.replaceAll("Linkin", "NewYork");
					System.out.println(c);//NewYorkPark
					System.out.println("—————————");	
					//去除字符串两空格:String trim() 
					String d = " -LinkinPark- ";
					System.out.println(d);// -LinkinPark- 
					d=d.trim();
					System.out.println(d);//-LinkinPark-
				}
			}

public class String类的其他功能_按字典顺序 {
	public static void main(String[] args) {
		//定义字符串
		String a = "HelloWorld";
		String b = "HelloWorld";
		String c = "abc";
		System.out.println(a.compareTo(b));//0
		System.out.println(a.compareTo(c));//-25
		System.out.println("—————————");
		
		String d = "Hello";
		String e = "Hel";
		System.out.println(d.compareTo(e));//2
		/* 源码
		public int compareTo(String anotherString) {
			int len1 = value.length;//this.value.length-->d.toCharArray().length = 5;
		    int len2 = anotherString.value.length;//this.value.length-->e.toCharArray().length = 3;
		    int lim = Math.min(len1, len2);// min = 3;
		    char v1[] = value;  //d字符串转换成字符数组:['H','e','l','l','o'];
		    char v2[] = anotherString.value; //e字符串转换成字符数组:['H','e','l'];
		
		    int k = 0;
		    while (k < lim) {
		        char c1 = v1[k];
		        char c2 = v2[k];
		        if (c1 != c2) {
		            return c1 - c2;
		        }
		        k++;
		    }
		    return len1 - len2;
		}*/
	}
}








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值