Java 学习博客_6 入门——字符串类

简介: 以黑马程序员全套Java教程网课为主。

API

JDK 中提供了实现各种功能的封装类,供我们使用。

就像灯的开关,我们只用知道按下开关就能开灯关灯,并不需要弄明白底层原理如何实现。

可以下载一个 java 帮助文档,在其中搜索这些类的具体使用方法。

点击索引,打开输入框

如果只有左侧目录显示,右侧不显示:

右键帮助文档-属性-常规-最下面解除锁定

重新打开帮助文档即可。

AWwYX.png

Pakckage:该类所处的包下(除了 java.lang,其他包都要导包)

下拉还有构造方法、成员方法的详解。

字符串输入

查看 Scanner 的帮助文档可以得知,成员方法 nextLine() 可以获取一整行内容,可用于输入接收字符串。

Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
//这里只输入 sc.nextLine() 然后 alt enter 代码自动补全,就会自动生成左边 String line。

String

String 类型代表字符串。其内容都是被双引号引住的。

在 java.lang 包下,不用导包。

String s="abc";//直接赋值
String s1=new String();//空字符串

char[] c={'a','b','c'};
String s2=new String(c);//根据字符数组创建字符串

byte[] b={97,98,99};//a, b, c 对应的 ascii 码
String s3=new String(b);

字符串一旦创建不能再修改。不过多个字符串的值可以共享s1=s2;

字符串在效果上像字符数组 char[],但(JDK9)以后底层实现方法其实是字节数组 byte[]。

字符串比较:== 和成员方法 equals()

用==判断的比较,是比较 s1 和 s2 的值(即:对应字符串的地址值)是否相同。

基本类型 == 比较的是数据值是否相同,引用类型 == 比较的是地址是否相同。

用字符串的成员方法 equals() 判断,是比较字符串内容是否相同。

char[] c={'a','b','c'};
String s1=new String(c);
String s2=new String(c);
System.out.println(s1==s2);//输出 false,因为 s1 s2 地址不同,只有内容是一样的
System.out.println(s1.equals(s2));//输出 true

String s3="abc";
String s4="abc";
System.out.println(s3==s4);//输出 true,因为对于相同内容的字符串,JVM 会建立一个字符串对象(在堆内存的字符串池中)供它俩参考。
System.out.println(s3.equals(s4));//输出 true

System.out.println(s1==s3);//输出 false
System.out.println(s1.equals(s3));//输出 true

遍历字符串:成员方法 length() 和 charAt()

s.length()可以获取字符串长度

s.charAt(i) 可以获取索引为 i 处的字符

for(int i=0;i<s.length;i++){
    System.out.println(s.charAt(i));
}

字符串拼接

字符串可以直接用 + 号拼接。

String s1="Hello ";
String s2="World";
s1=s1+s2;//Hello World

在内存中,字符串发生拼接后会在堆内存中新建一个字符串(有"Hello ","World","Hello World"三个字符串,而不是直接在"Hello "的位置上拼接"World")。这样操作还是比较费时费空间的。之后介绍的另一个类——StringBuilder 可以更有效地解决这个问题。

endsWith()

查看字符串是否以指定子串结尾。

String s1="hello world";
s1.endsWith("world");

StringBuilder 类

与 String 类相比,最主要的特点在于内容可变。

在 java.lang 包下,不用导包。

构造方法:

构造方法名 说明
StringBuilder() 无参构造方法
StringBuilder(String s) 把给定的 String 字符串转换成 StringBuilder 类型的
成员方法名 说明
append(String s) 在结尾拼接上字符串 s
StringBuilder reverse() 反转字符串
String toString() 把 StringBuilder 类型转换为 String 类型并返回

用 StringBuilder 完成字符串拼接操作:

  1. String 类型转换为 StringBuilder 类型
  2. StringBuilder 类型通过 append() 成员方法拼接字符串
  3. StringBuilder 类型通过 toString() 成员方法转换为 String 类型
String s="Hello ";
StringBuilder sb=new StringBuilder(s);//或者先无参构造,再在结尾拼接 append(s),但有点多此一举
sb.append("World");
String s1=sb.toString();

//骚操作:匿名对象,使用完立刻被垃圾回收器回收,建议少用
String s1=new StringBuilder(s).append("World").toString();

用 StringBuilder 完成字符串反转操作:

String s="Hello World";
String sr=new StringBuilder(s).reverse().toString();
目录
相关文章
|
6天前
|
安全 Java 编译器
JAVA泛型类的使用(二)
接上一篇继续介绍Java泛型的高级特性。3. **编译时类型检查**:尽管运行时发生类型擦除,编译器会在编译阶段进行严格类型检查,并允许通过`extends`关键字对类型参数进行约束,确保类型安全。4. **桥方法**:为保证多态性,编译器会生成桥方法以处理类型擦除带来的问题。5. **运行时获取泛型信息**:虽然泛型信息在运行时被擦除,但可通过反射机制部分恢复这些信息,例如使用`ParameterizedType`来获取泛型参数的实际类型。
|
6天前
|
安全 Java 编译器
JAVA泛型类的使用(一)
Java 泛型类是 JDK 5.0 引入的重要特性,提供编译时类型安全检测,增强代码可读性和可维护性。通过定义泛型类如 `Box&lt;T&gt;`,允许使用类型参数。其核心原理是类型擦除,即编译时将泛型类型替换为边界类型(通常是 Object),确保与旧版本兼容并优化性能。例如,`Box&lt;T&gt;` 编译后变为 `Box&lt;Object&gt;`,从而实现无缝交互和减少内存开销。
|
26天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
33 10
|
28天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
76 4
|
28天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
29 4
|
28天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
52 1
|
3天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
36 14
|
6天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
34 13
|
6天前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
1月前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
109 17