文章目录
Java常用API——String
我们首先看一下官方文档中的介绍:
String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。 例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
以下是一些如何使用字符串的示例:
System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);
字符串可以理解为简化的字符数组,但其本质上是作为对象来处理的。
声明和创建字符串
最基本的方法是直接赋值
String str = "HelloWorld";
既然是对象,那么也可以利用构造函数进行赋值
char[] iAmChar = {'你','好'};
String str1 = new String(iAmChar);
String str = new String("HelloWorld");
字符串保存的内容都要放到双引号""中
使用直接赋值和构造函数赋值的区别
首先看一个例子
String str = new String("123");
String str1 = "123";
System.out.println(str == str1);
我给str和str1的赋值一样,都是123,但使用==关键字比较却不相同,说明使用构造函数赋值和直接赋值确实存在差异。
String str = "123";
String str1 = "123";
System.out.println(str == str1);
而将str和str1都使用直接赋值"123",得到的比较结果确实相同。
原理
使用直接赋值的方式,创建出来的字符串是存放在方法区中的常量池中:
使用new的方式创建出来的字符串是存放在堆内存中
使用直接赋值的方式创建的字符串,会在常量池中查找该字符串是否存在,如果存在则直接使用该地址如 果不存在,则在常量池中创建该字符串,并赋值
如果使用直接赋值的方式对字符重新赋值,则会拿新的内容去常量池中查找,看是否存在,如果不存在,创建
连接字符串
连接字符串顾名思义就是将两个字符串连接起来。字符串之间使用“+”进行连接。
String str = "你好,我是";
String str1 = "王铁蛋";
//使用 + 连接str与str1,并将连接后的值赋给str3,这样str3的值就是"你好,我是王铁蛋"
String str3 = str + str1;
//也可以直接连接两个字符串内容
str3 = "你好,我是" + "王铁蛋";
//得到的值与上面一样
注意
Java中一句相连的字符串不能分两句写,例如:
System.out.println(“Hello
world”);
这种写法是错误的,如果一个字符串太长,可以使用+连接,例如:
System.out.println(“Hello” +
“world”);
使用equals(Object obj)比较字符串内容是否相同
还是一个相同的例子
String str = "123";
String str1 = "123";
String str2 = new String("123");
String str3 = new String("123");
System.out.println(str2 == str3);
System.out.println(str1 == str2);
从输出结果中可以发现,不仅是直接赋值的字符串和使用构造方法赋值的字符串之间存在差异,两个使用构造方法赋相同值的字符串比较之后返回的还是一个false。
原理上面已经讲过,因为使用构造函数给String赋值是将字符串以对象形式放在堆内存中,而每使用一次构造函数在堆内存中就会新开辟一块内存空间用来保存对象,而使用"=="比较时是将两个对象的内存地址进行比较,所以会输出一个false。
为了避免这种情况,在比较字符串时可以使用equals()方法。
String str = "123";
String str1 = "123";
String str2 = new String("123");
String str3 = new String("456");
String str4 = new String("123");
System.out.println(str.equals(str1));
System.out.println(str.equals(str2));
System.out.println(str.equals(str3));
输出结果:
使用方法如上,equals()方法会返回boolean类型的值来表示两字符串是否相同,true代表相同,false代表不相同。
使用equalslgnoreCase()进行比较字符串内容是否相同
equalslgnore方法是在忽略字母大小写的情况下比较两字符串是否相等,返回值类型为boolean,需要将对比的字符串作为参数在调用时传值。
代码如下:
String str = "ABC";
String str1 = "aBc";
System.out.println(str.equalsIgnoreCase(str1));
输出结果:
使用contains()方法判断是否包含指定的字符串
contains方法返回值为boolean,需要将指定字符串信息作为参数在调用时传值
String str = "abcdefg";
System.out.println(str.contains("adf"));
System.out.println(str.contains("efg"));
运行结果:
使用startsWith()方法判断字符串以什么开头
startsWith()方法返回值为boolean,需要以字符串作为参数
代码:
String str = "abcdefg";
System.out.println(str.startsWith("abc"));
System.out.println(str.startsWith("efg"));
运行结果:
使用endsWith()判断字符串以什么结尾
endsWith()方法返回值为boolean,需要以字符串作为参数
代码:
String str = "abcdefg";
System.out.println(str.endsWith("abc"));
System.out.println(str.endsWith("efg"));
运行结果:
使用isEmpty()判断字符串是否为空
isEmpty()方法返回值为boolean.
代码:
String str = "abcdefg";
String str1 = "";
System.out.println(str.isEmpty());
System.out.println(str1.isEmpty());
运行结果:
参考文献:
Java™ Platform, Standard Edition 8 API Specification
Java从入门到精通(明日科技出版)