2021-01-20

String

 

  java.lang.String 字符串类  该类加final修饰

 * 底层是char数组
 * 所以字符串很多特性就是数组的特性
 * 
 * 1字符串一旦创建不能更改
 * 
 * 2查询更改快  添加删除慢  为了提升字符串的访问效率,Java中提出了字符串常量池,相当于一个缓存区
 * 
 * 
 * 
 *     引用类型对象应该保存在堆内存 但是字符串不同,保存在静态区的字符串常量池中
 * 3在程序的执行过程中,如果程序要用到某个字符串"abc"虚拟机
 *     如果已经有了,就直接指向该字符串即可,如果没有就新建一个对象,并指向
 

public class _01_String {
	public static void main(String[] args) {
		String s1 = "abc";
		//不会去指向堆内存,   会指向字符串常量池s
		String s2 = "abc";
		//true  比较的是内存地址
		System.out.println(s1 == s2);
		
		System.out.println(s1.equals(s2));
		//这里并没有改变字符串abc的值而是新建了一个字符串k  并让s1z指向k
		s1 = "k";
		
		String s3 = "abc";
		String s4 ="abc";
		String s5  = "Abc";
		
		//上面只创建了两个对象  abc 和Abc
		System.out.println(s3 == s4);
		
		//true
		System.out.println(s3.equals(s4));
		System.out.println("---------");
		//第三部分
		
		//创建三个对象 (堆内存两个 常量池一个)    五块空间栈内存两个  堆内存两个  常量池一个
		String s6 = new String("123");
		String s7 = new String("123");
		
		System.out.println(s6 == s7);
		System.out.println(s6.equals(s7));

		
		
	}

String常用方法

 

 

public class _04_String {
	public static void main(String[] args) {
		
		// 返回字符串长度  int length()
		String s1 = "qwertss%";
		System.out.println(s1.length());// 8 
		
		
		// 获取字符串某个位置上的字符
		//从0开始
		char c1 = s1.charAt(2);
		System.out.println(c1);
		
		//判断字符串是否以指定字符结尾的  判断是否以指定字符开始
		System.out.println("HelloWord.java".endsWith("java"));
		System.out.println("HelloWord.java".endsWith("java "));//false
		
		//不区分大小写
		
		System.out.println("abc".equals("ABc"));
		//true
		System.out.println("abc".equalsIgnoreCase("ABc"));
		
		
		
		byte [] byteArr = "abc".getBytes();
		for (byte b : byteArr) {
			System.out.println(b);
		}
		System.out.println("---");
		
		//  int indexOf(String str) : 获取指定字符串的起始索引值,找不到返回-1,如果有多个 ,找到第一个就不找了
		System.out.println("abcdce".indexOf("cd"));
				
		// int indexOf(String str,int fromIndex) : 从指定位置开始找(包含),找不到返回-1
		System.out.println("abcdeabc".indexOf("a",1));
				
		//  int lastIndexOf(String str) : 获取最后一次出现的位置,找不到返回-1(倒着遍历,第一次出现,就是最后一次)
		//  int lastIndexOf(String str,int fromIndex) : 获取最后一次出现的位置,找不到返回-1,从指定位置反向搜索,第一次出现的位置
		System.out.println("abcdeabc".lastIndexOf("a"));
		
		//  String replaceAll(String regex, String replacement) : 把一个字符串替换为指定字符串
		// 一个类似的  replace : 这两个功能是一样的,只不过 replace 不支持正则表达式
		System.out.println("123321".replaceAll("1", "a")); // a2332a
		System.out.println("1.2.3".replaceAll(".", "-")); // ----- , 因为 会把 . 解析为正则表达式,而 . 代表 任何字符
		// 1-2-3 , 正则表达式中 可以通过 \ 把 .  转义为无意义字符,但是在java中 \ 是转移符,所以 要写 \\ 对\进行转义才可以
		System.out.println("1.2.3".replaceAll("\\.", "-")); 
		System.out.println("1.2.3".replace(".", "-")); // 1-2-3  , 因为不支持正则表达式,所以 . 就是 .
				
				
		//  String[] split(String regex) : 分割字符串,通过指定分隔符,来分割字符串,返回分割后的新字符串数组,支持正则表达式
		String myTime = "2021-1-20";
		String[] myTimes = myTime.split("-");
		for (String string : myTimes) {
					System.out.println(string);
			}
		System.out.println("==========");
				
		//  String substring(int begin) : 获取该字符从某个下标开始到结尾的子字符串(包含)
		System.out.println("abcde".substring(3));
				
		//  String substring(int beginIndex,int endIndex) : 获取该字符从某个下标开始(包含) 到某个下标结束的子字符串(不包含)
		System.out.println("qwerttyuyikjn".substring(3, 6));
		
		
		char[] c2 = "abc".toCharArray();
		for (char c : c2) {
			System.out.println(c);
		}
		
		
		
		//14转大写转小写 string toUpperCase();
		System.out.println("abcvaDASDASDAasdasd".toUpperCase());
		System.out.println("aggaDASDASDAasdasd".toLowerCase());
		
		
		//15String trim  删除字符串两边的空格
		System.out.println("   ab ce      ".trim());
		
		
		//17 static String valueOf(Object obj)调用指定对象的toString方法
		System.out.println(new Object());
		String ss =null;
		System.out.println(ss);
		
		
	}

 

1StringBuffer 和StringBuilder是什么?
 * 
 *         是一个可变的字符串缓冲区
 * 
 * 
 * 2原理   
 * 
 * 
 *             预先在内存中申请一块空间,可以容纳字符序列 字符数组
 * 
 * 
 *             如果 预留空间不够,会进行自动扩容
 *             底层都是char[] 并且默认初始化容量是16个字符
 * 
 * 3String, StringBuffer, StringBuilder最大区别
 * 
 *         1string不可变字符序列,而StringBuider和StringBuffer是可变字符序列
 *         2StringBuffer是线程安全,在多线程环境下,不会出现问题,所以效率低,一般常用于类中
 *         3StringBuilder是非线程安全,在多线程环境下可能出现问题效率高,一般用于方法中
 * 4 如何选择StringBuilder和StringBuffer
 *             多线程环境下,是否有可能出现多个线程同时操作同一个数据的可能(增删改)

类型转换

public class _04_Integer {
	public static void main(String[] args) {
		//int --> Integer
		Integer i1 = new Integer(222);
		
		Integer i2 = Integer.valueOf(222);
		
		//2 Integer --> int
		int i3  = i2.intValue();
		
		
		
		//3  String  --->  Integer
		Integer i4 = Integer.valueOf("123");
		
		Integer i5 = new Integer("222");
		
		
		//4 Integer -->String
		String s1 = i5.toString();
		
		//5String -->int
		int i6 = Integer.parseInt("12312");
		
		//6int --String
		String s2 =333 +"1";
		System.out.println(s2);
	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值