Java的基本程序设计结构(第二部分)
- Java的基本程序设计结构
- 三、字符串
- 1. 子串
- 2. 拼接
- 3. 不可变字符串
- 4. 检测字符串是否相等
- 5. 空串与 Null 串
- 6. 码点与代码单元
- 7. String API
- 四、输入输出
- 1. 读取输入
- 2. 格式化输出
- 3. 文件输入与输出
- To be continued...
Java的基本程序设计结构
本文推荐具有C语言基础的、耐心的同学进行阅读,本文中省略了部分与C语言相同的知识点,想要深入学习Java的同学请点这里 |->我是链接
本文分为三个部分,这是第二部分,作者欢迎纠错,但拒绝人身攻击。单击此处查看第一部分 |->
我还是链接
三、字符串
1. 子串
String 类的 substring 方法可以从一个较大的字符串中提取出一个子串。 例:
String greeting = "Hello";
String s = greeting.substring(0, 3);
//创建了一个由字符 “Hel” 组成的字符串
注意:substring 的第二个参数是不想复制的第一个位置,起始复制位置为0 。 substring 的工作方式有一个优点,易于计算子串的长度。
2. 拼接
Java 允许使用 + 进行拼接。
String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;
//拼接成 Expletivedeleted
当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。
任何一个 Java 对象都可以转换成字符串。
这种特性通常用在输出语句中,例:
System.out.println("The answer is " + answer);
//这是一条合法的语句,并且将会打印出所希望的结果。
如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态 join 方法:
String all = String.join("/","S","M","L","XL");
3. 不可变字符串
由于 String 类没有提供用于修改字符串的方法,在进行修改时,只能将被修改字符串的前某个部分提取出来,再拼接自己想要添加的部分。 由于不能修改字符串中某个指定字符,String 类对象被称为不可变字符串,可以更改变量中存储的字符串,但是不能修改其中任何一个字符。
4. 检测字符串是否相等
可以使用 equals 方法检测两个字符串是否相等。例: s.equals(t) 如果字符串 s 与字符串 t 相等,则返回 true ;否则,返回 false。需要注意,s 与 t可以是字符串变量,也可以是字符串。 要想检测两个字符串是否相等,而不区分大小写,可以使用 equalsIgnoreCase 方法。 不能使用 == 运算符检测两个字符串是否相等!这个运算符只能确定两个字符串是否放置在同一个位置上。
5. 空串与 Null 串
空串是长度为0的字符串。可以调用以下代码检查一个字符串是否为空。
if (str.length() == 0)
//或者
if (str.equals(""))
空串是一个 Java 对象,有自己的串长度和内容。
Null是一个特殊的值,表示目前没有任何对象与该变量关联。可以调用以下代码检查一个字符串是否为 null 。
if (str == null)
//有时候要检查一个字符串既不是 null 也不为空串
if(str != null && str.length() != 0)
先检查 null
6. 码点与代码单元
Java 字符串由 char 值序列组成。char 数据类型是一个采用 UTF-16 编码表示 Unicode 码点的代码单元。大多数的常用 Unicode 字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。
length 方法将返回采用 UTF-16 编码表示的给定字符串所需要的代码单元数量。 要想得到实际的长度即码点数量,可以调用以下语句:
String greeting = "Hello";
int cpCount = greeting.codePointCount(0, greeting.length());
调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于 0 ~ 长度-1 之间。 要想得到第 i 个码点,可以使用下列语句:
int index = greeting.offsetByCodePoints(0, i);
int cp = greeting.codePointAt(index);
如果想遍历一个字符串,并且依次查看每一个码点,可以使用下列语句
int cp = sentence.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp)) i += 2;
else i++;
//调换顺序。可以进行回退操作
7. String API
详细内容请点击右侧链接阅读联机 API 文档 |->https://docs.oracle.com/javase/8/docs/api/index.html
四、输入输出
1. 读取输入
读取标准输入流时,首先需要构建一个 Scanner 对象,并与标准输入流相关联。
Scanner in = new Scanner(System.in);
构建之后,就可以使用 Scanner 类的各种方法实现输入操作了。 在输入时,空格依旧作为分隔符。
String name = in.nextLine();
//防止输入行中含有空格影响输入
String firstname = in.next();
int age = in.nextInt();
//读取一个整数
double score = in.nextDouble();
//读取一个浮点数
不要忘记调用 java.util 包
import java.util.*;
//写在顶部
2. 格式化输出
与C语言类似。。。
用于 printf 的转换符
转换符 | 类型 | 举例 |
d | 十进制整数 | 180 |
x | 十六进制整数 | 9f |
o | 八进制整数 | 237 |
f | 定点浮点数 | 15.9 |
e | 指数浮点数 | 1.59e+01 |
g | 通用浮点数 | |
a | 十六进制浮点数 | 0x1.fccdp3 |
s | 字符串 | Hello |
c | 字符 | H |
b | 布尔 | True |
h | 散列码 | 42628b2 |
% | 百分号 | % |
n | 与平台有关的行分隔符 |
还可以给出控制格式化输出的各种标志
标志 | 目的 |
, | 添加分组分隔符 |
#(对于 f 格式) | 包含小数点 |
#(对于 x 或 0 格式) | 添加前缀 0x 或 0 |
$ | 给定被格式化的参数索引。例如以某进制打印第 n 个参数 |
< | 格式化前面说明的数值 |
3. 文件输入与输出
- 文件读取 用一个 File 对象构造一个 Scanner 对象,代码如下:
Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8");
//如果文件名中包含一个反斜杠,绝对路径中应该增加一个
构造一个 PrintWriter 对象。
PrintWriter out = new PrintWriter("myfile.txt","UTF-8");
//如果文件不存在,创建该文件
文件定位: 当使用集成开发环境时,使用下列语句定位文件位置:String dir = System.getProperty("user.dir");
To be continued…