Java高级编程:深入API与字符串操作

需积分: 3 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高级编程至关重要,因为它们构成了许多复杂程序设计的基础。