赞
踩
字符串其实就是Unicode字符序列,也就是字符的集合,Java没有内置的字符串类型,而是在标准库中提供了一个预定义类,叫做 String。每一个用双引号括起来的字符串都是 String类型。
String str = "Hello";
在一个较大的字符串提取其中一部分的小字符串叫做子串,在 String 类中的 substring 方法可以提取字串。
String str = "Hello";
String s = str.substring(0, 3); // "Hel"字符串 由str字符串的[0,3)下标组成。
将两个小的字符串拼接起来组成一个大的字符串。在 Java 中允许使用 + 号连接两个字符串。
String str1 = "Hello";
String str2 = "World";
String str = str1 + str2; // "HelloWorld" 字符串
当一个字符串与一个非字符串进行拼接时,会将后者转换成字符串。一般运用于打印输出。
int age = 18;
String str = "My age is " + age; // "My age is 18" 字符串
int answer = 100;
System.out.println("The answer is " + answer);
如果希望能将多个字符串放在一起,用一个定界符分隔,可以使用静态 join 方法。
String all = String.join(" / ", "S", "M", "L", "XL");
System.out.println(all); // 打印 S / M / L / XL
在 Java11 中还提供了 repeat 方法
String str = "Java";
String repeat = str.repeat(3);
System.out.println(repeat); // JavaJavaJava
字符串的继承结构图
可以看到实现了 Serialization(序列化)、CharSequence(可读序列)、Comparable(比较,排序) 三个接口。
相关文档可以去文档去查看: String 文档
String 类没有提供修改字符串中某个字符的方法,底层使用的是不能修改的char数组:
private final char value[];
如果想要修改一个字符串,可以使用字串与拼接结合,保留想要的字串,再与希望替换的字符拼接。
String str = "Hello";
str = str.substring(0, 3) + "p"; // "Help"
由于 String 使用的是不可改变的字符串,与可替换的字符串相比是否小路会降低?答案是:是也不是。因为不可变的字符串有一个优点:编译器可以让字符串共享。
在底层实现比较复杂,我们可以理解为有一个存放各种字符串的公共池子,字符串变量指向这池子,可以使得相同的字符串指向共享的池子,这个思想是比较重要的,在 Java 后面学习框架时候有一部分就是使用这个思想。
可以使用 equals 方法检测两个字符串是否相等,表达式: s t r 1. e q u a l s ( s t r 2 ) str1.equals(str2) str1.equals(str2)
String str1 = "123";
String str2 = "123";
System.out.println(str1.equals(str2)); // true
System.out.println("123".equals(str1)); // true
想要检测两个字符串是否相等,并且不区分大小写,可以使用 equalsIgnoreCase 方法
System.out.println("Hello".equalsIgnoreCase("HELLO")); // true
千万不要使用 == 来检测两个字符串是否相等,这个运算符只能确定两个字符串是否在内存中存放在同一位置,完全有可能将多个内容相同的字符串副本放在不同位置上。 == 一般用于检测基本数据类型,还有底层使用。
String str1 = "123";
System.out.println(str1 == "123"); // 可能为 true
System.out.println(str1.substring(1) == "23"); // 可能为false
如果虚拟机始终是字符串共享,就可以使用 == 运算,但实际上只有字符串字面量是共享的,而 + 或者 substring 是不共享的,所以不要使用 == 来检测字符串是否相等,以免出现 bug。
空串是指长度为 0 的串,是一个 String 对象,而 String 还可以存放一个特殊的值,名为 null,表示目前没有任何对象与该变量关联。
String str1 = ""; // 空串
String str2 = null; // null
有关String类的 方法与构造器以及字段,可以到 String 文档 【java.lang.String】查找,里面拥有大量的方法供我们使用。
有些时候我们需要由一些较短的字符串来构成字符串,如果我们使用字符串的拼接方式来构建,效率会比较低,即耗时又消耗空间,我们可以使用 StringBuilder类来解决这个问题。
// 空的字符串构建器
StringBuilder stringBuilder = new StringBuilder();
// 添加内容
stringBuilder.append("a");
stringBuilder.append("b");
// 使用 toString 方法获取 String 对象
String s = stringBuilder.toString();
System.out.println(s); // ab
相关文档可以去 文档 【java.lang.StringBuilder】 查找。
在前面我们已经见识到 S y s t e m . o u t . p r i n t l n ( ) 或者 S y s t e m . o u t . p r i n t ( ) System.out.println() 或者 System.out.print() System.out.println()或者System.out.print()这一标准输出流,就是控制台窗口,但是标准输入流就没有怎么简单了,需要构建标准输入流 System.in 相关类 Scanner
import java.util.Scanner;
// 使用 Scanner 类需要导入 java.util.Scanner 包
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine(); // 读取第一行数据,可以包含空格
String next = scanner.next(); // 读取一个单词,空格或者换行接收
// 想要读取基本数据就使用nextXXXX()
int num = scanner.nextInt();
double nextDouble = scanner.nextDouble();
// ...等等
}
}
使用 S y s t e m . o u t . p r i n t f ( ) System.out.printf() System.out.printf()格式化输出,Java 延用的是 C语言的格式化输出。
String name = "孙悟空";
System.out.printf("Hello, %s", name); // Hello, 孙悟空
如果不清楚的C语言怎样格式化的 C语言格式化 百度网站了解一下。
想要读取一个文件也可以使用 S c a n n e r Scanner Scanner 类,写入文件使用 P r i n t W r i t e r PrintWriter PrintWriter类
//读取文件
String fileName = "D:\\data\\test\\newFile4.txt";
Scanner scanner = new Scanner(new FileReader(fileName));
while (scanner.hasNextLine()) { //按行读取字符串
String line = scanner.nextLine();
System.out.println(line);
}
// 写入文件
PrintWriter printWriter = new PrintWriter(new FileWriter(fileName));
printWriter.write("123");
本文需要使用的类比较多,如果不清楚的话也没关系,后面学到对象,会迎刃而解,现在先一笔带过,后面再来看看就行了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。