Java高级编程:深入API与字符串操作
需积分: 3 10 浏览量
更新于2024-07-28
收藏 1.05MB DOC 举报
"Java高级编程教程,涵盖JAVASE,深入讲解JAVAAPI,特别是lang包中的String类和StringBuffer类,以及如何处理键盘输入的细节。"
在Java高级编程中,深入理解和运用JAVAAPI是至关重要的。这里我们主要关注的是`java.lang`包,它包含了Java语言的基本类,比如String类和StringBuffer类。这两个类都用于表示字符串,但它们在处理字符串的方式上有所不同。
String类是不可变的,这意味着一旦创建,它的内容就不能更改。例如,`String x = "a" + 4 + "c";` 这行代码在编译时会被优化为创建一个新的StringBuffer对象,添加元素,然后转换回String。这是因为直接连接字符串会创建新的String对象,这在大量操作时可能导致性能问题。
StringBuffer类则提供了可变的字符串,允许我们在已有字符串基础上进行追加、插入或删除操作,而无需每次都创建新的对象。例如,`StringBuffer sb = new StringBuffer().append("a").append(4).append("c").toString();` 这样的代码在运行时更为高效,特别是处理大量字符串操作时。
关于String对象的比较,由于字符串在Java中是对象,所以使用`==`比较的是引用,而不是内容。因此,当`Strings1 = "hello"; String s2 = "hello";`时,s1和s2指向相同的字符串常量池中的对象,所以`s1 == s2`为真。然而,如果通过`new`关键字创建了两个不同的String对象,如`Strings1 = new String("hello"); String s2 = new String("hello");`,那么它们是不同的对象,即使内容相同,`s1 != s2`。
在处理用户输入时,通常需要读取键盘输入的字符流。Java中的`System.in.read()`方法可以用来读取单个字节的输入。在处理文本输入时,需要注意不同操作系统对换行符的差异。例如,Windows系统使用`\r\n`作为换行,而Unix系统只使用`\n`。在编程时,应将这两种情况考虑在内。
以下是一个简单的示例,展示了如何读取键盘输入直到用户输入"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 { // 否则,输出并重置pos,准备下次存储
System.out.println("Received: " + strInfo);
pos = 0;
}
}
pos++; // 无论什么字符,都增加pos,表示下一个位置
}
}
}
```
这个示例展示了如何处理用户输入的每个字符,区分回车和换行,直到检测到"bye"时终止程序。理解这些基础概念对于深入学习Java高级编程至关重要,因为它们构成了许多复杂程序设计的基础。
2017-05-30 上传
2019-06-29 上传
2013-07-20 上传
2023-03-09 上传
2024-01-10 上传
2024-09-28 上传
2023-10-06 上传
2023-02-07 上传
2023-04-20 上传
shangguanyunyao
- 粉丝: 0
- 资源: 5
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录