一.概述
上一篇讲完了Java的对象与类。链接:Java对象与类
今天讲在Java基础中的字符串类。它是Java中使用最多的类,任何地方都有它的身影。
二.字符串
1.字符串
从概念上讲,Java字符串就是Unicode字符序列。在使用String类的时候并没有引入任何的包,其实在Java中会默认导入java.lang包中所有的类。String类就是其中的一个。String类没有提供修改字符串的方法,所以称字符串是不可变类。一旦被创建,变量的值就不会发生任何改变。所有创建的字符串变量都存放在一个常量池中,当再次使用的时候可以不用进行创建,这样可以大大的加快效率,但是会牺牲一定的内存,因为他不会消失,因为字符串变量太常用了,所以采用Java采用牺牲内存来大大的提高获取的效率。
/**
* 字符串类
*/
public class StringDemo {
public static void main(String[] args) {
// 声明一个字符串变量。
String str = "A";
String str4 = "B";
// String既然是个类,那么就可以使用new来创建。
String str0 = new String("A");
Integer integer = new Integer(1);
// 这里发现任何类型都可以和字符串拼接。因为有"+"符号,这是Java中唯一一个被重载的符号。
String str1 = str + 1;
String str2 = str + false;
String str3 = str + integer;
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
// + 的运行是重新创建一个新对象在生成一个StringBuilder进行拼接,反复的创建对象大大的降低效率
System.out.println((new StringBuilder(String.valueOf(str))).append(1).toString());
// 我们可以直接使用StringBuilder类 来进行字符串的操作。
StringBuilder stringBuilder = new StringBuilder();
// append方法进行字符串的拼接
stringBuilder.append("a");
System.out.println(stringBuilder);
// StringBuffer类和StringBuilder类 相同,但是前者是线程同步的,安全。方法俩者相同
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("a");
System.out.println(stringBuffer);
System.out.println();
// 常用API
String string = "122";
// 返回下标为1的字符
System.out.println(string.charAt(1));
// 按照ASCII码的顺序在按字符串顺序比较字符串的值 相等为0,之前为负数,之后为正数
System.out.println(string.compareTo("2"));
// 比较字符串
System.out.println(string.equals("1"));
// 忽略大小写比较
System.out.println(string.equalsIgnoreCase("1"));
// 是否以a开头
System.out.println(string.startsWith("a"));
// 是否以1结尾
System.out.println(string.endsWith("1"));
// 字符串的长度
System.out.println(string.length());
// 将字符串中的2用3替换
System.out.println(string.replace("2","3"));
// 截取字符串从1开始到结束
System.out.println(string.substring(1));
// 截取字符串从1开始到2不包括2
System.out.println(string.substring(1,2));
// 将大写转换称小写
System.out.println(string.toLowerCase());
// 小写转大写
System.out.println(string.toUpperCase());
// 清空字符中的空格
System.out.println(string.trim());
// 用。号链接三个字符串
System.out.println(String.join("。","a","b","c"));
// 通过构造器构造对象
StringBuilder strBuilder = new StringBuilder("abc");
// strBuilder的长度
System.out.println(strBuilder.length());
// 在1号位置插入 字符串a
System.out.println(strBuilder.insert(1,"a"));
// 从1号位置到2号位置删除 不包括2号
System.out.println(strBuilder.delete(1,2));
/*
*
* 不常用的
* */
// 返回从0号位置到最后的码点
System.out.println(string.codePointAt(0));
// 返回从0号位置到1号位置的码点
System.out.println(string.offsetByCodePoints(0,1));
// 将码点作为流返回
System.out.println(string.codePoints());
int[] codePoints = {1,2,3};
System.out.println(new String(codePoints,0,2));
System.out.println(string.indexOf(1));
System.out.println(string.indexOf("1"));
System.out.println(string.indexOf("1",1));
System.out.println(string.indexOf(1,1));
System.out.println(string.lastIndexOf(1));
System.out.println(string.lastIndexOf("1"));
System.out.println(string.lastIndexOf("1",1));
System.out.println(string.lastIndexOf(1,1));
System.out.println(string.codePointCount(1,2));
System.out.println(strBuilder.appendCodePoint(1));
}
}
2.空串和null的区别:
空串是长度为0的字符串,空串是一个Java对象,可以一调用字符串对象的一下方法,比如获取长度等,只不过是内容为空。而nuu是没有任何对象与该变量关联,所以不能使用字符串的相关方法。
三,结束语
这篇讲的比较简单,主要讲的是String类常用API,和StringBuilder、StringBuffer的区别。深入的需要看JDK的源码以及内存相关的知识,但对于平常的工作来说这些足够了。
下一篇我们讲Java继承。
有些可能我理解的不够深刻,大家如果觉得我说的不够详细可以参考我的推荐书,详细的看一下。欢迎大家评论。第一时间我会回复大家。谢谢!