Java之字符串

一、字符串的定义

每个用双引号括起来的字符串都是String类的一个实例。

字符串有两种定义方式:

1. String s = “hello world”; //常用

2. String s = new String(“hello world”);


二、String的不可变性

当声明String类型(引用数据类型)变量并赋值后,对字符串的修改不会改变原来的内存区域,会重新开辟新的内存空间存放新的String值,这就是String的不可变性。

优点:编译器可以实现字符串的共享。

缺点:影响运行效率,增加内存消耗。


三、字符串常用的方法

1.获取子串

String类的substring方法可以从一个较大的子串中提取出一个子串。

语法:

StringName.substring(int beginIndex);

StringName.substring(int beginIndex , int endIndex);

返回一个新字符子串。这个字符串包含原始字符串中从beginIndex到串尾 endIndex - 1的所有字符单元。

String hello = "helloworld";
String hello1 = hello.substring(3);//loworld
String hello2 = hello.substring(0,3);//hel

2.拼接

Java语言允许使用 + 号拼接两个字符串(常用方法)。

拼接产生的新串,会在内存中重新开辟空间存放,符合String的不可变性。

String a = "hello ";
String b = "world";
String c = a + b // helloworld
//这里字符串c重新在内存中开辟空间,存放拼接后的字符串

3.字符串长度

语法:StringName.length() 返回字符串长度。

注:与求数组长度有区别,注意分别。


4.字符串大小写

语法:

StringName.toLowerCase() 和 StringName.toUpperCase()

返回一个新字符串。这个字符串将原始字符串中的大写字母改为小写(第一个方法) 或者 将原始字符串中的所有小写字母改成大写(第二个方法)。

String a = "Hello"
String b;

b = a.toLowerCase() // b 为 hello
b = a.toUpperCase() // b 为 HELLO

5.判断字符串是否相等

可以使用equals方法检测两个字符串是否相等。

例如:s.equals(t) 或者 s.equals(“hello”)

如果字符串s与字符串t相等,则返回true;否则,返回false。

对于检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。

例如: “Hello”.equalsIgnoreCase(“hello”)

注: 一定不要使用检测两个字符串是否相等。 比较的是两个字符串在内存的地址是否相等,即使两个字符串内容完全一样,但是如果用两个不同的变量存储,其在内存中的地址也是不同的。


6.空串与Null串

空串 ‘"’ 是长度为0的字符串。可以使用如下代码来检测一个字符串是否为空:

String str;
...
    
if(str.length() == 0)
或   
if(str.equals(""))

空串是一个String实例与null不同,空串有自己的长度(0)和内容(空)。

而null为String变量的一个特殊值,其表示,未在内存开启空间。

String str;
...
    
if(str == null)  //判断一个String变量是否为null

/*
*此外,要判断一个字符串既不是null也不是空串,可以使用如下代码
*if(str != null && str.length() != 0)
*注意,要首先检查str不为null
*/

7.检查子串是否存在

语法:indexOf(String str) 或 indexOf(String str,int fromIndex)

返回与字符串str匹配的第一个子串的开始位置(int)。这个位置从索引0或者fromIndex开始计算。