Java 的String类

1.String类

2.String的比较

3.常量池

4.String类常用方法


1.String类

String类表示字符串。可以直接创建字符串对象:

String str = new String(“HelloWorld”);//表示str是字符串对象,内容是 HelloWorld,在堆创建

或 String str = “Hello world”;    //作用如上。在栈创建


2.String的比较

比较是否相同:

String str1 = new String(“abc”);
String str2 = “abc”;
System.out.println(str1==str2); //打印false
System.out.println(str1.equals(str2));//打印true
上面为什么会有两种不一样的结果呢?

str1 == str2 的比较原则是两个引用是不是指向同一个对象。

str1.equals(str2) 的比较原则是两个对象的内容是否相同。

额外问题:

上诉的 str1 和 str2 指向的字符在内存中有什么区别?

str1 指向的字符 在内存中有两个,一个是存在常量池中的 常量字符“abc” ,一个是通过new创建的在堆中的String对象。

str2 指向的字符 在内存中只有一个,就是常量池中的 “abc”;


3.常量池

下面代码:

	String str1 = "abc";
	String str2 = "abc";
	System.out.println(str1==str2);
	//问打印的是什么?
打印的是:true

因为字符串“abc”是存在常量池中的。当常量池中有abc的时候,str1 和 str2 这两个引用都会指向他。所以str1 和 str2 指向的是同一个对象。


4.String类常用方法

1.求字符串长度length()

int len = str.length();

2.定位字符串中的字符charAt()

String str = “hello”;
char ch = str.charAt(0);
// ch = 'h';

3.返回指定 字符/字符串 在字符串中的索引值 indexOf()和lastIndexOf()

		String str = "hello hello";
		int index = str.indexOf('h');	//index = 0
		int index2 = str.lastIndexOf('h');	//index2 = 6
		System.out.println(index+","+index2);
indexOf()表示返回指定 字符/字符串 在字符串中第一次出现时的索引

lastIndexOf()表示返回指定 字符/字符串 在字符串最后一次出现时的索引

若字符串中不存在指定的 字符/字符串 ,返回 -1

		String str1 = "abcdefg";
		int t = str1.indexOf("cd");//返回 2 
		System.out.println(t); 

indexOf()的重载------ indexOf(string ,fromIndex);

从字符串的 fromIndex索引值开始查找 子字符串string

下面计算出一个字符串中有多少个子字符串(key)

		String str = "abcdefsafafabcdfkjljfabc dfadfabbcabcaaabcd";
		int count = 0;
		int index = 0;
		String key = "abc";
		while((index = str.indexOf(key,index)) != - 1)
		{
			count++;
			index += key.length();
		}
		System.out.println(count);// 5 
	}



4.字符串中是否以指定的字符串开头,结尾,是否包含指定字符串

boolean startsWith(String str)
boolean endsWith(String str)
boolean contains(String str)


5.返回一个新构造的String 字符串,将原字符串的中的指定字符替换成另一个字符

String str = "hello hello";
String str2 = str.replace('h', 'a');
System.out.println(str2);
//打印结果:aello aello

6.以索引值为参数,返回一个字符串的子字符串

		String str = "hello hello";
		String str2 = str.substring(0,5);//闭开区间
		System.out.println(str2);
		//打印结果:hello

7.去除字符串两端的空白:

		String str = "           hello hello ";
		String str2 = str.trim();
		System.out.println(str2);
		//打印结果:hello hello

8.字符串的比较

str1.compareTo(str2):

如果 str1 == str2 ,返回 0;如果str1 > str2 返回正整数;否则返回 负整数


字符串比较规则:(优先级才上到下)

1.从第一个字符开始比较,小写字母大于大写字母,靠后的英文字母比靠前的大,如 b > a,英文字母大于数字

2.长字符串 大于 短字符串

		String str1 = "abcd";
		String str2 = "bcde";
		int t = str1.compareTo(str2);//返回-1,表示str1 < str2  
		System.out.println(t); 


9.String 与 字符数组 互相转换

字符串转换为字符数组:

String str = "hello world";
char [] arr = str.toCharArray();
字符数组转换为字符串:

		char []arr ={'h','e','l','l','o'}; 
		String str = new String(arr);



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值