Java的基本程序设计结构(第二部分)

  • Java的基本程序设计结构
  • 三、字符串
  • 1. 子串
  • 2. 拼接
  • 3. 不可变字符串
  • 4. 检测字符串是否相等
  • 5. 空串与 Null 串
  • 6. 码点与代码单元
  • 7. String API
  • 四、输入输出
  • 1. 读取输入
  • 2. 格式化输出
  • 3. 文件输入与输出
  • To be continued...

Java的基本程序设计结构

本文推荐具有C语言基础的、耐心的同学进行阅读,本文中省略了部分与C语言相同的知识点,想要深入学习Java的同学请点这里 |->我是链接

本文分为三个部分,这是第二部分,作者欢迎纠错,但拒绝人身攻击。

根据表结构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…