String与String方法

String是一个特殊的包装类数据,可以用:

String str = new String("abc");

String str = "abc";

两种形式来创建,第一种是用new()来创建对象的,它会存放在堆中,每调用一次就会创建一个新的对象;而第二种是先在栈中创建一个对String类的对象引用变量str ,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str 指向"abc",如果已经有"abc",则直接令str 指向"abc"。

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用 == ,下面用例子说明上面的理论。

String str1 = "abc";

String str2 = "abc";

System.out.println(str1 == str2);  // true

可以看出str1 和str2 指向同一个对象

String str1 = new String("abc");

String str2 = new String("abc");

System.out.println(str1 == str2);  // false

用new的方式是生成不同的对象,每一次调用都生成一个新的对象。

因此用第二种方式(String str = “abc”;)创建多个"abc"字符串,在内存中其实只存放一个对象而已。这种写法有利于节省内存空间,同时它可以在一定程度上提高程序的运行速度,因为jvm(java virtual machine)会自动根据栈中数据的实际情况来决定是否有必要创建新的对象。而对于String str = new String(“abc”); 的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新的对象,从而加重了程序的负担。

常量池是JVM的一块特殊的内存空间。和堆没什么关系

1.String s1 = "ubuntu";  
 String s2 = “ubuntu”;

在这里插入图片描述

2.String s3 = new String("ubuntu");  
 String s4 = new String("ubuntu"); 

在这里插入图片描述

String类:字符串不可变的,字符串常量池-堆
new String()
new String("")
new String(char[] )
new String(byte[], charset)
String中将equals()、toString()重写过了

判断a和b的类型是否一致
a instanceof b

String str = "hello hi haha\n\r\t";

** 获得字符串长度 -> 字符个数(空格、转义字符算一个字符)**

System.out.println(str.length());//16

将字符串转换成对应的字符数组

	char[] chs = str.toCharArray();
	System.out.println(Arrays.toString(chs));
	//[h, e, l, l, o,  , h, i,  , h, a, h, a, 

,
, ]

获取字符串中指定下标对应的字符

	char c = str.charAt(6);
	System.out.println(c);//h
String str = "白日@依山尽,@黄河入海流";

切割字符串
从指定下标位置开始(包括此位置),截取到最后

	String s1 = str.substring(4);
	System.out.println(s1);//山尽,@黄河入海流

从指定下标位置开始,到指定下标结束,前包含,后不包含

	String s2 = str.substring(4, 6);
	System.out.println(s2);//山尽

下标位置找不到,返回 -1
获得给定的字符第一次出现的位置 - 下标

	int index = str.indexOf('@'); // 2
	System.out.println(index);

从下标4开始,获得给定的字符第一次出现的位置

index = str.indexOf('@', 4);
	System.out.println(index);//7
	index = str.indexOf("山尽"); // 4
	index = str.indexOf("山尽", 4);// 4
	str.lastIndexOf('@');// 7
	// 192.168.6.66
String str = "\tlucy      ";

去掉前后两端的空格

str = str.trim();
System.out.println(str + "1");//lucy1
str = "hz_liuzb@163.com";

是否以指定字符串结尾

	boolean flag = str.endsWith(".com");
	System.out.println(flag);//true

是否以指定字符串开始

	flag = str.startsWith("+86");
	// gbk GBK  Gbk
		str = "Gbk";

全部变大写

	str = str.toUpperCase();
	System.out.println(str);//GBK

全部变小写

	str = str.toLowerCase();
	System.out.println(str);//gbk
	
	String str1 = "gbk";
	String str2 = "GBK";
	System.out.println(str1.equals(str2));//false

忽略大小写的判断

	System.out.println(str1.equalsIgnoreCase(str2));//true
	str = "";
//		str = null;

判断字符串长度是否为0

	System.out.println(str.isEmpty());//true

将所有其他类型对象变成字符串类型

	String strP = String.valueOf(new People());
	System.out.println(strP);//null,0
	StringBuilder sb = new StringBuilder("hello");
//		new String(sb);

追加

	sb.append("hi");
	System.out.println(sb.toString());//hellohi
	sb.insert(0, "ha!");
	System.out.println(sb.toString());//ha!hellohi
	sb.delete(0, 3);
	System.out.println(sb.toString());//hellohi
	sb.reverse(); // 反转
	System.out.println(sb.toString());//iholleh
	sb.replace(3, 5, "**");
	System.out.println(sb.toString());//iho**eh

正则表达式:
字符类 预定义字符类 Greedy数量词
[^a-z] 0-9 @163.com
. 表示.本身
? * +

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值