Java 常用API(上)

1.1是什么

/**
 * String 是java.lang.String下的东西 属于系统自带的方法,使用的时候不需要导包
 * String 是字符串类, 是引用类型 ,底层是char数组, 所以String的特性几乎和数组一致
 * 
 * 1. 字符串一旦创建,该字符串对象不能更改
 * 
 * 2. 为了提高字符串的访问效率,Java虚拟机使用了一种缓存技术,
 * 可以对字符串操作更加简单方便,更加高效(字符串常量池)
 * 
 * 3.字符串会被保存在静态区中的常量池中,可复用性增强
 * 当我们用到一个重复的字符串的时候, 会去常量池中进行检索,
 * 如果有该字符串,则直接指向,如果没有就要重新创建
 * 
 * @author 人间失格
 * @data     2021年10月18日下午6:28:46
 */

1.2基本使用

package String;
/**
 * String 是java.lang.String下的东西 属于系统自带的方法,使用的时候不需要导包
 * String 是字符串类, 是引用类型 ,底层是char数组, 所以String的特性几乎和数组一致
 * 
 * 1. 字符串一旦创建,该字符串对象不能更改
 * 
 * 2. 为了提高字符串的访问效率,Java虚拟机使用了一种缓存技术,
 * 可以对字符串操作更加简单方便,更加高效(字符串常量池)
 * 
 * 3.字符串会被保存在静态区中的常量池中,可复用性增强
 * 当我们用到一个重复的字符串的时候, 会去常量池中进行检索,
 * 如果有该字符串,则直接指向,如果没有就要重新创建
 * 
 * @author 人间失格
 * @data     2021年10月18日下午6:28:46
 */

public class String_01 {

	public static void main(String[] args) {
		//创建一个字符串对象,直接指向常量池
		//数据类型 String 变量名string = 值 "ab";
		String string ="ab";
		//string是main方法中的局部变量,  = 赋值只是更改了这个变量的值,并没有更改ab这个字符串对象
		//就是重新创建了一个东西在常量池当中,ab这个值并不会更改
		string = "cd";
		
		//变量s1 ,s2 只会创建一个对象 ,就是asd 保存在常量池当中
		String s1 = "asd";
		String s2 = "asd";
		//判断这两个值是否相等,结果为true
		System.out.println(s1==s2);
		//equals 比较两个对象是否相等
		System.out.println(s1.equals(s2));
		
		//
		String s3 = new String("abc");
		String s4 = new String ("abc");
		//fales 因为这里比较的是两个值的数据地址 所以结果不同
		System.out.println(s3==s4);
		//这里用equals 直接比较的就是两个值的大小
		System.out.println(s3.equals(s4));
	}

}

1.3构造方法

package String;
/**
 * 构造方法 : 创建 String 对象的几种方式
 * 1. 直接创建
 * 2.普通构造
 * 3.字节数组
 * 4.字符数组
 * 
 * @author 人间失格
 * @data     2021年10月18日下午6:56:19
 */

public class String_02 {

	public static void main(String[] args) {
		//1. 直接创建
		String s1 = "qwer";
		
		//2.普通构造  创建对象  数据类型 String 变量名 s2 = new 数据类型 String (参数)
		String s2 = new String ("asdf");
		
		//3. 字节数组 , 打印输出数值对应的Ascc码
		byte [] bytes = {97,98,99,100};
		// 创建对象 把bytes数组赋值给 String类型的变量s3
		String s3 = new String (bytes);
		//打印输出结果 结果的值为相对应的数字的值
		System.out.println(s3);
		
		//4. 字节数组 , 截取一部分
		//下标从0开始 ,第二个参数 起始下标(包含),第三个参数 是截取的个数
		String s4 = new String (bytes,0,3);
		//打印结果abc, 起始位置 0 ,截取个数为3
		System.out.println(s4);
		
		//5. 字符数组  用字符串形式打印出字符类型的数组
		char [] chars = {'q','w','e','r','t','y','u'};
		//同3
		String s5 = new String (chars);
		System.out.println(s5);
		
		//6. 字符数组 截取一部分 第一个数字为截取位置, 第二个数字为截取个数
		String s6 =new String (chars,2,3);
		//ert
		System.out.println(s6);
	}

}

1.4常用方法

package String;
/**
 * String API
 * 常用方法 
 * 
 * 1. 什么方法 ,静态方法还是成员方法
 * 2. 方法名 , 参数 , 返回值是什么
 * 3. 方法功能
 * 
 * @author 人间失格
 * @data     2021年10月18日下午7:19:21
 */

public class String_03 {

	public static void main(String[] args) {
		// 1. char charAt( int index ) : 获取字符串中指定下标的字符
		String s1 = "qwer";
		//获取数组s1 中小标为s3的数组
		char c = s1.charAt(3);
		System.out.println("类型1:  ");
		System.out.println(c);


		
		//2. boolean startsWith(String prefix)  : 判断该字符串是否以指定字符串开头
		      //endsWith  : 是否以指定字符串结尾
		//区分大小写 , 第一个结果为false ,第二个注意有空格 false , 第三个 结尾判断 true
		System.out.println("类型2 :");

		System.out.println("Hellow,world".startsWith("he"));
		System.out.println("Hellow,world ".endsWith("world"));
		System.out.println("Hellow,world".endsWith("world"));
		
		//3. boolean equals(Object obj) : 判断字符串是否相等
		//boolean equalsIgnoreCase(String str) : 不区分大小写判断相等 注意第二个I为大写的i
		System.out.println("类型3 :");
		System.out.println("aSdFghj".equalsIgnoreCase("ASDfghJ"));
		
		System.out.println("类型4 :");
		//4.byte [] getBytes() ; 把字符串转换为"字节"数组  这个就是把字母变成数字
		byte [] bytes ="abcd".getBytes();
		//遍历数组
		for (byte b : bytes){
			System.out.println(b);
		}
		
		System.out.println("类型5:  ");
		//5. char [] toCharArray() : 把字符串转换为"字符"数组
		char [] chars ="abcd".toCharArray();
		//数组遍历
		for (char d :chars){
			System.out.println(d);
		}
		
		System.out.println("类型6:  ");
		//6. int indexOf(String str) : 获取指定字符串在该字符串中第一次出现的索引,找不到就返回-1
		//int lastIndexOf(Strng str) :获取指定字符串在该字符串中最后一次出现的索引
		int index = "asfskfsfngesdg".indexOf("ng");
		System.out.println(index);
		index ="asfskfsfngesdg".lastIndexOf("f");
		System.out.println(index);
		
		System.out.println("类型7:  ");
		//7. int length () : 返回字符串长度
		System.out.println("asfskfsfngesdg".length());
		
		System.out.println("类型8:  ");
		//8. String [] split (String regex) : 分割字符串,支持正则表达式
		String [] strs ="2021-10-18".split("-");
		//不遍历数组直接打印的值为数组的地址
		System.out.println(strs);
		//遍历数组
		for (String string : strs){
			System.out.println(string);
		}
		
		System.out.println("类型9:  ");
		//9. String replaceAll(String regex , String replacement) : 替换字符中的内容为指定的文字,支持正则表达式
		              // replace : 同上 ,不支持正则表达式
		String string ="asgbjdfgafdgjeagolgfield";
		//第一个为被替换的数,第二个为替换的数
		String newstring = string.replaceAll("g", "8");
		System.out.println(newstring);
		
		System.out.println("类型10:  ");
		//10. String substring(int beginIndex , int endIndex) : 截取字符串, 包含开始 "不包括"结束
		//substring(int beginIndex) : 从指定下标开始(包含),到末尾
		String s2 = "abcdef";
		// cdef
		//从下标2开始到末尾
		System.out.println(s2.substring(2));
		// cd
		//从下标2 开始 到下标4 但不包含4
		System.out.println(s2.substring(2,4));
		
		
		System.out.println("类型13:  ");

		//11. String toUpperCase() : 转换成大写
		//12. String toLowerCase() : 转换成小写
		//13. String trim() : 去除两边的空格
		System.out.println("     a           s          ".trim());
		System.out.println("____________");
		//多个英文名字,以逗号隔开
		String name = "zhang,wang,lihua,liming";
		//需求: 获取每一个姓名,并把该姓名以首字母大写进行存储
		//1 以逗号隔开,得到封装每个名字的数组
		String [] names =name.split(",");
		//2. 遍历数组,获取每个名字,截取字符串,转为大写,再拼接起来
		for (int i=0; i <names.length ; i++){
			String Nnames = names[i];
			//截取首字母并且大写
//			System.out.println(Nnames.substring(0,1).toUpperCase()+Nnames.substring(1));
			names[i] = Nnames.substring(0, 1).toUpperCase()+Nnames.substring(1);
		}
		//遍历得到数组中每一个元素
		for (String string2 : names) {
			System.out.println(string2);
		}
	}
}

1.5注意事项

package String;
/**
 * 使用String不推荐进行频繁的字符串拼接操作
 * 因为字符串一旦创建不可以更改,只要拼接,就会创建新的自负串对象
 * 浪费空间,效率还低,就等于是使用定长数组频繁做添加操作一样
 * 
 * @author 人间失格
 * @data     2021年10月18日下午8:45:05
 */

public class String_04 {

	public static void main(String[] args) {
		String[] strs = { "a", "b", "c" };
		String str = "";
		for (int i = 0; i < strs.length; i++) {
			str += strs[i] + ",";
		}
		System.out.println(str);
		// a , b , c , "" , a, , a,b, , a,b,c,最终结果
	}
}

 

2.StringBuffer和StringBuilder

2.1是什么

/**
 * StringBuilder 和StringBuffer 都在java.lang下,使用不需要导包
 * 1.StringBuilder 和StringBuffer是啥
 *         是一个可变的字符串缓冲区,底层也是数组,只是不过该数组会进行自动的扩容
 *         适合做字符串拼接操作
 * 2. 原理
 * 预先在内存中创建一个空间, 用来哦保存字符(字符数组)
 * 如果预存空间长度不足,会进行自动扩容用来容纳更多的字符
 * 默认长度为16 ,扩大容量为(原长度+1)*2 :   16->34->70
 * 3.StringBuilder 和StringBuffer的区别
 * StringBuilder : 线程安全,在多线程环境下使用,没有问题
 * StringBuffer : 非线程安全,在多线程环境下使用,没有问题
 * 
 * @author 人间失格
 * @data     2021年10月18日下午8:51:23
 */
 

 2.2使用方式

package String;
/**
 * StringBuilder 和StringBuffer 都在java.lang下,使用不需要导包
 * 1.StringBuilder 和StringBuffer是啥
 *         是一个可变的字符串缓冲区,底层也是数组,只是不过该数组会进行自动的扩容
 *         适合做字符串拼接操作
 * 2. 原理
 * 预先在内存中创建一个空间, 用来哦保存字符(字符数组)
 * 如果预存空间长度不足,会进行自动扩容用来容纳更多的字符
 * 默认长度为16 ,扩大容量为(原长度+1)*2 :   16->34->70
 * 3.StringBuilder 和StringBuffer的区别
 * StringBuilder : 线程安全,在多线程环境下使用,没有问题
 * StringBuffer : 非线程安全,在多线程环境下使用,没有问题
 * 
 * @author 人间失格
 * @data     2021年10月18日下午8:51:23
 */

public class StringBuilder__StringBuffer {
	public static void main(String[] args) throws  Exception {
		// 创建对象 数据类型 变量名 = new 数据类型 ();
		StringBuilder sb = new StringBuilder();
		// 添加(尾部添加)
		sb.append("a");
		sb.append("b");
		// 插入到指定位置
		sb.insert(1, "c");
		// 已添加元素个数
		System.out.println(sb.length());
		// 返回当前容量,默认是16
		System.out.println(sb.capacity());
		// 反转
		sb.reverse();
		// 调用 toString 方法 可以转换为字符串
		String str = sb.toString();
		System.out.println(str);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Iiversse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值