思维导图:
6.1 字符串类
-
String类
- 定义: 通过字符串常量或构造方法创建。
- 特点: 不可变性,一旦创建内容不可改变。
- 内存管理: 字符串常量池。
- 常用方法:
.length()
,.substring()
,.equals()
, 等。
-
StringBuffer类
- 用途: 创建可修改的字符串。
- 特点: 线程安全,同步。
- 常用方法:
.append()
,.insert()
,.delete()
, 等。
6.2 System类与Runtime类
-
System类
- 功能: 提供访问系统相关属性和资源的方法。
- 常用方法:
.currentTimeMillis()
,.getProperty()
,.arraycopy()
, 等。
-
Runtime类
- 功能: 允许与运行时环境交互。
- 常用方法:
.exec()
,.totalMemory()
,.freeMemory()
, 等。
6.3 Math类与Random类
-
Math类
- 功能: 执行基本数学运算。
- 常用方法:
Math.sqrt()
,Math.pow()
,Math.round()
, 等。
-
Random类
- 功能: 生成伪随机数。
- 用法:
new Random().nextInt()
,new Random().nextDouble()
, 等。
6.4 BigInteger类与BigDecimal类
-
BigInteger类
- 用途: 处理非常大的整数。
- 常用方法:
.add()
,.subtract()
,.multiply()
,.divide()
, 等。
-
BigDecimal类
- 用途: 精确的浮点数运算。
- 常用方法:
.add()
,.subtract()
,.multiply()
,.setScale()
, 等。
6.5 日期与时间类
- 使用: 操作日期和时间。
- 类别:
java.util.Date
,java.util.Calendar
,java.time.LocalDate
,java.time.LocalDateTime
, 等。
6.6 日期与时间格式化类
- 用途: 格式化和解析日期时间字符串。
- 类别:
SimpleDateFormat
,DateTimeFormatter
, 等。
6.7 NumberFormat类
- 功能: 数字的格式化和解析。
- 用法:
NumberFormat.getInstance()
,.format()
,.parse()
, 等。
6.8 包装类
- 定义: 为每种基本数据类型提供的类。
- 例子:
Integer
(int),Long
(long),Double
(double), 等。 - 自动装箱与拆箱: 自动转换基本类型和包装类型。
6.9 正则表达式
- 用途: 字符串的模式匹配和搜索。
- 类别:
Pattern
,Matcher
。 - 例子:
Pattern.compile("regex")
,matcher.find()
,matcher.group()
, 等。
总结
- 重要性: Java API提供了广泛的工具,以便于处理常见编程任务,如字符串处理、数学计算、系统管理等。
- 学习目标: 理解和掌握这些API的使用,以提高编程效率和质量。
我的理解:
Java API的基本理解
- 定义: Java API是一套预先定义的库,由Java语言提供。它包含了许多用于不同目的的类和接口。
- 作用: 提供了标准的方法来执行各种任务,如数据结构操作、网络通信、图形界面开发等。
- 优点: 使用API可以简化编程任务,提高代码的可读性和可维护性。
理解章节关键部分
-
字符串类 (String, StringBuffer)
- String类是不可变的,一旦创建其值就不能改变。
- StringBuffer类用于创建可修改的字符串,适用于频繁修改字符串的场景。
-
System类与Runtime类
- System类提供系统相关的属性和方法,如标准输入输出、访问环境变量。
- Runtime类允许程序与运行时环境进行交互,如内存管理和执行外部程序。
-
Math类与Random类
- Math类提供了基础的数学运算函数。
- Random类用于生成随机数,对于需要随机性的程序来说非常重要。
-
BigInteger与BigDecimal类
- 用于处理超出标准整数和浮点数范围的大数运算。
- BigDecimal特别适用于需要高精度的浮点数运算。
-
日期与时间类
- 提供处理日期和时间的功能,如获取当前日期、时间计算等。
-
日期与时间格式化类
- 用于将日期和时间数据转换成可读的格式,或从字符串解析日期时间。
-
NumberFormat类
- 用于数字的格式化,如货币格式、百分比格式等。
-
包装类
- 将基本数据类型封装成对象,使得基本类型也能使用对象的特性,如方法调用。
-
正则表达式
- 提供强大的字符串匹配和处理能力,对于文本搜索、验证和格式化等非常有用。
理解的技巧
- 实践应用: 尝试编写小程序来实践这些API的使用。
- 例子和练习: 查找或编写特定的例子和练习题来加深理解。
- 官方文档: 阅读Java的官方文档来获取更深入的理解。
- 同行讨论: 和其他学习者或开发者讨论,以获得不同的视角和理解。
理解这些概念不仅仅是记忆它们的功能,更重要的是理解它们在实际编程中如何被应用,以及它们是如何帮助简化编程任务的。
第6章 6.1.2 String类的常用方法
概览
String类在Java中用于表示字符串,并提供了一系列方法来操作这些字符串。这些方法包括字符串的检索、比较、转换、替换等多种操作。
常用方法和功能
-
基本信息获取
int length()
: 返回字符串长度。char charAt(int index)
: 返回指定索引处的字符。boolean isEmpty()
: 判断字符串是否为空。
-
字符串查找
int indexOf(int ch) / int indexOf(String str)
: 返回首次出现的指定字符或子字符串的索引。int lastIndexOf(int ch) / int lastIndexOf(String str)
: 返回最后出现的指定字符或子字符串的索引。
-
字符串比较
boolean equals(Object obj)
: 比较字符串内容是否相同。boolean equalsIgnoreCase(String str)
: 忽略大小写比较字符串内容。int compareTo(String str)
: 按字典顺序比较两个字符串。
-
字符串转换
String toLowerCase() / String toUpperCase()
: 将字符串转换为全小写或全大写。char[] toCharArray()
: 将字符串转换为字符数组。static String valueOf(int i)
: 将其他类型的数据转换为字符串。
-
字符串替换和连接
String replace(CharSequence oldstr, CharSequence newstr)
: 替换字符串中的某些部分。String concat(String str)
: 将指定字符串连接到此字符串的末尾。
-
字符串截取和分割
String substring(int beginIndex) / String substring(int beginIndex, int endIndex)
: 截取字符串的子字符串。String[] split(String regex)
: 根据给定正则表达式的匹配拆分此字符串。
-
去除空格
String trim()
: 去除字符串两端的空格。
-
字符串判断
boolean startsWith(String prefix)
: 判断字符串是否以指定前缀开始。boolean endsWith(String suffix)
: 判断字符串是否以指定后缀结束。boolean contains(CharSequence cs)
: 判断字符串是否包含指定的字符序列。
应用示例
- 示例代码演示了如何使用这些方法来获取字符串的长度、检索字符、比较字符串、转换大小写、替换和截取字符串等。
注意事项
- 当使用字符索引方法时,如
charAt(int index)
,需要注意索引范围,以避免StringIndexOutOfBoundsException
。
6.1.3 StringBuffer类
理解Java中StringBuffer类的核心在于理解其作为一个可变的字符串序列的特性。以下是对StringBuffer类的概念、方法和用途的详细解读:
1. StringBuffer类的概念
- 可变性:与String类不同,StringBuffer类的内容和长度都是可变的。这意味着使用StringBuffer时,可以添加、删除或修改其内容,而不会像String那样每次都创建一个新对象。
- 字符容器:StringBuffer类像一个容器,可以容纳和修改字符序列,适用于频繁改变内容的字符串操作。
2. 常用方法
- 构造方法:
StringBuffer()
: 创建一个初始容量为16的字符串缓冲区。StringBuffer(int capacity)
: 创建指定容量的字符串缓冲区。StringBuffer(String s)
: 根据给定字符串内容创建字符串缓冲区。
- 长度和容量:
int length()
: 返回缓冲区中的字符数。int capacity()
: 返回缓冲区的当前容量。
- 添加和插入:
StringBuffer append(char c)
: 添加字符或字符串到缓冲区末尾。StringBuffer insert(int offset, String str)
: 在指定位置插入字符串。
- 删除和替换:
StringBuffer delete(int start, int end)
: 删除指定范围的内容。StringBuffer deleteCharAt(int index)
: 删除指定位置的字符。StringBuffer replace(int start, int end, String s)
: 替换指定范围内的字符串。
- 修改和反转:
void setCharAt(int index, char ch)
: 修改指定位置的字符。StringBuffer reverse()
: 反转字符串中的字符。
- 截取和转换:
String substring(int start) / String substring(int start, int end)
: 截取子字符串。String toString()
: 将StringBuffer对象转换为String对象。
3. StringBuffer的使用场景
- 适用场景:当需要创建和修改大量文本或在循环中对字符串进行操作时,使用StringBuffer会更有效,因为它不会像String那样频繁创建新对象。
- 性能优势:在频繁修改字符串内容的场景下,StringBuffer比String更高效,因为它避免了不必要的对象创建。
4. 示例应用
- 实践示例:如书中所示,通过具体的代码示例(如添加、删除、修改、反转字符串等操作),展示了如何使用StringBuffer类的各种方法。
5. 注意事项
- 容量管理:虽然StringBuffer是动态的,但了解其容量和扩容机制对于优化性能是有帮助的。
- 线程安全:StringBuffer是线程安全的,这意味着它的方法是同步的,可以在多线程环境中安全使用。
理解StringBuffer类,关键在于理解其可变性和如何利用这一特性进行有效的字符串操作。通过实际编程实践,可以加深对StringBuffer操作的理解和应用。
总结:
重点
-
String类
- 不可变性:String对象一旦创建,其值就不能被改变。
- 常用方法:如
length()
,charAt()
,substring()
,indexOf()
,equals()
, 等。 - 字符串池:字符串常量和字符串值相同的String对象会被存储在字符串池中。
-
StringBuffer类
- 可变性:StringBuffer对象的内容和长度可以改变。
- 线程安全:StringBuffer中的方法是同步的,可以在多线程环境中安全使用。
- 常用方法:如
append()
,insert()
,delete()
,reverse()
, 等。
难点
- String的内存管理:理解字符串常量池的概念以及String对象在内存中的处理方式。
- StringBuffer的性能考量:理解StringBuffer的线程安全特性和其对性能的影响,以及何时选择StringBuilder作为替代。
易错点
-
String的比较:
- 使用
equals()
而非==
来比较字符串的内容。==
比较的是引用,而非内容。 - 忽视字符串的不可变性,错误地认为可以通过方法如
toUpperCase()
直接修改字符串。
- 使用
-
StringBuffer的使用:
- 错误地认为StringBuffer和String具有相同的不可变性质。
- 在单线程环境下默认使用StringBuffer而非StringBuilder,可能导致不必要的性能损耗。
-
字符串操作中的索引错误:
- 越界访问:如使用
charAt()
时提供的索引超出了字符串的有效范围。 - 子字符串处理:如
substring()
的索引使用不当,需要记住它是“包括开始索引,不包括结束索引”。
- 越界访问:如使用
通过重点、难点和易错点的概述,可以更清楚地理解和注意String和StringBuffer类在实际编程中的正确使用方式,从而避免常见的错误。