String类小结

15 篇文章 0 订阅

一、String概述
   1.什么是String
        String类代表一个不可变的字符串,String类对象一旦创建,值不会被修改.
   2.字符串缓冲池
        由于String类对象是不能被修改的,为了提高程序性能,Java提供了一个字符串缓冲池.
        使用双引号形式定义字符串时,会先在缓冲池中查找是否有这个字符串,有就直接引用,没有则创建一个.
        使用构造函数定义字符串时,会先在缓冲池外创建一个对象,然后查找缓冲池内是否有这个字符串,没有就在池内再创建一个.
   3.字符串串联
        两个字符串使用"+"串联,其内部是使用StringBuffer的append()方法来实现的.
        一个字符串和其他对象使用"+"串联,这时会调用那个对象的toString(),将toString()的返回值和字符串串联.
二、StringBuffer和StringBuilder
   1.什么是StringBuffer、StringBuilder
        StringBuffer也是一个字符串,是可以改变的.
        StringBuilder也是一个字符串,可以改变的.功能和StringBuffer完全相同
   2.两者区别
        StringBuffer是从JDK1.0就存在的一个类,其所有方法都是同步的.
        StringBuilder是从JDK5新添加的一个类,所有的方法都没有同步,效率相对较高.

三、常用方法
 1.String类构造方法介绍
  (1)String(byte[] bytes)
  (2)String(byte[] bytes, String charsetName)
  (3)String(byte[] bytes, int offset, int length)
  (4)String(byte[] bytes, int offset, int length, String charsetName)
  (5)String(char[] value)
  (6)String(char[] value, int offset, int count)
  (7)String(StringBuffer buffer) 

		//代码示例
		import java.io.UnsupportedEncodingException;
		import java.util.Arrays;
		public class DemoDemoDemo {
			public static void main(String[] args) throws UnsupportedEncodingException {
				byte[] arr1 = { 97, 98, 99, -42, -48, -50, -60 };
				String s1 = new String(arr1); // 将字节数组解码为字符串
				System.out.println(s1);
		
				byte[] arr2 = s1.getBytes(); // 将字符串编码为字节数组
				System.out.println("系统默认码表值为:" + Arrays.toString(arr2));
		
				// 使用指定的码表将字符串编码,由于码表可能不存在,所以会有异常
				byte[] arr3 = s1.getBytes("UTF-8");
				System.out.println("UTF-8 码表值为:" + Arrays.toString(arr3));
		
				String s2 = new String(arr3, "UTF-8");// 使用指定码表将字节数组编码
				System.out.println("用UTF-8编码后的值为:" + s2);
				// 还可以指定字节数组一部分进行解码,或指定码表,将字节数组中的一部分解码.不再演示.
		
				char[] arr4 = { 'a', 'b', 'c', 'd' };
				String s3 = new String(arr4, 1, 2);// 将字符数组转为字符串,可以指定位置,初始位置和个数.
				System.out.println(s3);
		
				char[] arr5 = s3.toCharArray(); // 将字符串转为字符数组.
				System.out.println(Arrays.toString(arr5));
		
				StringBuilder sb = new StringBuilder();
				sb.append("伦敦奥运!");
				String s4 = new String(sb); // 将StringBuilder转为String
				System.out.println(s4); // 当然StringBuffer也可以.
			}
		}


 2.String类常用的几个方法(仅介绍几个,其余可以去查API)
    (1)char charAt(int index)    // 查找字符串中指定位置上的字符
    (2)int indexOf(String str)   // 查找字符串中某个字符在什么位置(第一次)
    (3)int indexOf(String str, int fromIndex) // 查找字符(从指定位置开始)
    (4)int lastIndexOf(String str)    // 查找字符最后一次出现的位置
    (5)String substring(int beginIndex) // 截取子串(指定位置开始到结束)
    (6)String substring(int beginIndex, int endIndex) //截取子串(指定范围)

		//代码示例
		public class Demo2 {
			public static void main(String[] args) {
				System.out.println("abcd".charAt(3)); 		  //结果为:d
				System.out.println("abcabc".indexOf('b'));    //结果为:1
				System.out.println("abcabc".indexOf('a', 1)); //结果为:3
				System.out.println("abcabc".lastIndexOf('a'));//结果为:3
				System.out.println("abcdef".substring(3));	  //结果为:def
				System.out.println("abcdef".substring(1, 5)); //结果为:bcde
			}
		}


四、练习(用字符串只是解决)
     1.获取一个已知文件名的扩展名.
     2.写一个方法findAll(String src, String key),要求在src字符串中找到key字符串出现的所有位置, 打印出来.

	//代码示例
	public class Test {
		public static void main(String[] args) {
			System.out.println(getExtname("Person.java"));// 结果为:java
			findAll("aaabbbcaabbbccc", "bbb"); // 结果为:3 9
		}
	
		// 练习一
		public static String getExtname(String filename) {
			int index = filename.lastIndexOf(".");
			return index == -1 ? null : filename.substring(index + 1);
		}
	
		// 练习二
		public static void findAll(String src, String key) {
			int fromIndex = 0; // 定义一个变量, 当作开始索引
			while (true) { // 定义一个循环
				// 第一次从src的fromIndex查找key第一次出现的位置
				int findIndex = src.indexOf(key, fromIndex); 
				if (findIndex == -1) // 如果没找到
					break; // 循环结束
				System.out.print(findIndex + " "); // 打印找到的位置
				fromIndex = findIndex + 1; // 设置下次开始找的位置, 位置为这次找到的位置+1
			}
		}
	}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值