当前位置:   article > 正文

【Java基础知识】字符串、输入与输出_7-9 jmu-java-01入门-格式化输入输出与字符串

7-9 jmu-java-01入门-格式化输入输出与字符串

字符串

字符串其实就是Unicode字符序列,也就是字符的集合,Java没有内置的字符串类型,而是在标准库中提供了一个预定义类,叫做 String。每一个用双引号括起来的字符串都是 String类型。

String str = "Hello";
  • 1

字串

在一个较大的字符串提取其中一部分的小字符串叫做子串,在 String 类中的 substring 方法可以提取字串。

String str = "Hello"String s = str.substring(0, 3); // "Hel"字符串 由str字符串的[0,3)下标组成。
  • 1
  • 2

拼接

将两个小的字符串拼接起来组成一个大的字符串。在 Java 中允许使用 + 号连接两个字符串。

String str1 = "Hello";
String str2 = "World";
String str = str1 + str2; // "HelloWorld" 字符串
  • 1
  • 2
  • 3

当一个字符串与一个非字符串进行拼接时,会将后者转换成字符串。一般运用于打印输出。

int age = 18;
String str = "My age is " + age; // "My age is 18" 字符串
int answer = 100;
System.out.println("The answer is " + answer);
  • 1
  • 2
  • 3
  • 4

如果希望能将多个字符串放在一起,用一个定界符分隔,可以使用静态 join 方法。

String all = String.join(" / ", "S", "M", "L", "XL");
System.out.println(all); // 打印 S / M / L / XL
  • 1
  • 2

Java11 中还提供了 repeat 方法

String str = "Java";
String repeat = str.repeat(3);
System.out.println(repeat); // JavaJavaJava
  • 1
  • 2
  • 3

不可变字符串

字符串的继承结构图
在这里插入图片描述
可以看到实现了 Serialization(序列化)、CharSequence(可读序列)、Comparable(比较,排序) 三个接口。
相关文档可以去文档去查看: String 文档
String 类没有提供修改字符串中某个字符的方法,底层使用的是不能修改的char数组:

private final char value[];
  • 1

如果想要修改一个字符串,可以使用字串与拼接结合,保留想要的字串,再与希望替换的字符拼接。

String str = "Hello";
str = str.substring(0, 3) + "p"; // "Help"
  • 1
  • 2

由于 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
  • 1
  • 2
  • 3
  • 4

想要检测两个字符串是否相等,并且不区分大小写,可以使用 equalsIgnoreCase 方法

System.out.println("Hello".equalsIgnoreCase("HELLO")); // true
  • 1

千万不要使用 == 来检测两个字符串是否相等,这个运算符只能确定两个字符串是否在内存中存放在同一位置,完全有可能将多个内容相同的字符串副本放在不同位置上。 == 一般用于检测基本数据类型,还有底层使用。

String str1 = "123";
System.out.println(str1 == "123"); // 可能为 true
System.out.println(str1.substring(1) == "23"); // 可能为false
  • 1
  • 2
  • 3

如果虚拟机始终是字符串共享,就可以使用 == 运算,但实际上只有字符串字面量是共享的,而 + 或者 substring 是不共享的,所以不要使用 == 来检测字符串是否相等,以免出现 bug。

空串与 null 串

空串是指长度为 0 的串,是一个 String 对象,而 String 还可以存放一个特殊的值,名为 null,表示目前没有任何对象与该变量关联。

String str1 = ""; // 空串
String str2 = null; // null
  • 1
  • 2

String API

有关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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

相关文档可以去 文档 【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();
		// ...等等
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

格式化输出

使用 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, 孙悟空
  • 1
  • 2

如果不清楚的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");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

本文需要使用的类比较多,如果不清楚的话也没关系,后面学到对象,会迎刃而解,现在先一笔带过,后面再来看看就行了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/558927
推荐阅读
相关标签
  

闽ICP备14008679号