Java精粹:String与StringBuffer的深度解析
需积分: 10 12 浏览量
更新于2024-10-09
1
收藏 1.22MB DOC 举报
"Java精华,包括Java SE的学习重点,特别是关于String类和StringBuffer类的深入理解,以及如何逐行读取键盘输入的程序示例。"
在Java编程语言中,掌握核心API是非常重要的,尤其是那些位于基础包`java.lang`中的类。`String`类和`StringBuffer`类是Java中处理文本数据的两个关键工具,它们在日常开发中被广泛使用。
`String`类代表不可变的字符串,一旦创建,其内容就不能修改。这意味着每次尝试修改`String`对象时,实际上都会创建一个新的`String`对象。例如,`String x = "a" + 4 + "c"` 在编译时会被优化为使用`StringBuffer`或`StringBuilder`来拼接字符串,以提高性能。这是因为字符串连接操作在循环或其他大量拼接情况下会更高效。
```java
String x = new StringBuffer().append("a").append(4).append("c").toString();
```
上述代码展示了如何使用`StringBuffer`进行字符串的动态构建,避免了创建多个中间`String`对象。
相反,`StringBuffer`(在多线程环境中)或`StringBuilder`(在单线程环境中)是可变的,允许在现有字符串基础上添加、插入或删除字符,而不会生成新的对象。它们提供了许多方法,如`append()`、`insert()`和`delete()`,用于操作字符串内容。
字符串常量在Java中是特殊的,它们存储在常量池中。因此,两个引用相同文字的`String`变量,如`String s1 = "hello"; String s2 = "hello";`,实际上会指向同一个对象,所以`s1 == s2`会返回`true`。但当使用`new`关键字创建`String`对象时,即使内容相同,也会创建两个不同的对象,因此`s1 != s2`。
在处理用户输入时,经常需要逐行读取。以下是一个简单的Java程序,演示如何使用`System.in.read()`逐行读取键盘输入,直到遇到特定的结束字符串(这里为"bye"):
```java
public class ReadLine {
public static void main(String[] args) {
String strInfo = null;
int pos = 0;
byte[] buf = new byte[1024]; // 字节数组,用于存放字符
int ch = 0; // 读入的字符
System.out.println("Please input a string:");
while (true) {
try {
ch = System.in.read(); // 读取一个字节
} catch (Exception e) {
}
switch (ch) {
case '\r': // 回车,不做处理
break;
case '\n': // 换行,将数组内容放入字符串
strInfo = new String(buf, 0, pos);
if (strInfo.equals("bye")) { // 如果字符串内容为"bye",则退出程序
return;
} else { // 不是"bye",输出并清空pos,准备下一次读取
// 输出处理
pos = 0;
}
}
}
}
}
```
这段代码展示了如何处理不同操作系统下的换行符(`\r\n`在Windows,`\n`在Unix),并且如何通过`System.in.read()`读取字符,直到找到特定的终止条件。注意,这个示例仅适用于简单的输入处理,实际应用中可能需要考虑异常处理、错误恢复和更复杂的输入解析。
2012-08-05 上传
150 浏览量
2012-02-13 上传
115 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
以我技术不会翻
- 粉丝: 59
- 资源: 34
最新资源
- 高速电路设计 A Practical Guide to High-Speed Printed-Circuit-Board
- 2006年4月二级C语言笔试试题.doc
- 华为编程规范.pdf
- Tapestry开发指南.pdf
- liferay portlet二次开发宝典
- C#自学笔记(崔北为)
- 一些软件公司的笔试题
- FORTRAN 77
- STATA 面板数据处理
- Beginning PHP and Oracle From Novice to Professional.2007
- C#,深入浅出全接触
- C#.NET 开发者手册
- 2410根文件系统实验
- C# Language Specification
- Flex 3 Cookbook 中文版.pdf
- s3c2410uboot移植实验