Java基础快速入门: 字符串String

Java字符串处理终极指南:从基础到高级,全面解析String、StringBuffer与StringBuilder Java中的String是一个不可变对象,这意味着一旦创建了String对象,其值就不能被更改。任何对String的操作都会导致新String对象的生成。这种设计有利于提高安全性和简化内存管理。在Java中,和是用于处理可变字符串的类。它们允许修改字符串内容而不需要创建新的对象。这在需要频繁修改字符串时非常有用,可以显著提高性能。:线程安全的,适合多线程环境。:非线程安全,但在单线程环境下比更高效。 阅读详情

本文纲要

  1. API概述与帮助文档使用
  2. 键盘录入字符串
  3. String类概述
  4. String类的常见构造方法
  5. 创建字符串对象的区别对比
  6. String的特点与常见面试题
  7. 字符串的比较
  8. 案例:用户登录
  9. 字符串的遍历
  10. 统计字符次数
  11. 手机号屏蔽 —— 字符串截取
  12. 敏感词替换 —— 字符串替换
  13. 切割字符串
  14. String常用方法总结
  15. 总结

什么是API?

API(Application Programming Interface,应用程序编程接口)指的是厂商或平台提前编写好并提供给开发者使用的类与方法。简单来说,API就是别人已经写好的代码,我们只需按照约定去调用即可,不用关心底层的实现细节。

Java的API就是JDK中提供的各种功能的Java类。这些类把底层实现封装了起来,我们只需要学习如何使用它们即可。
使用API帮助文档

API帮助文档相当于一本字典,用来查阅类的使用方式。Java官方文档通常是英文版,汉化版中1.6版本的翻译质量较好,常用于学习。

使用步骤:

  1. 打开帮助文档,点击“显示”,在索引输入框中输入要学习的类名(如Random、Scanner)。
  2. 进入类页面后,先看类的包名(用于导包)。
  3. 阅读类的描述,了解该类的作用。
  4. 查看构造方法,掌握如何创建对象。
  5. 查看方法摘要,关注方法名、参数、返回值以及方法说明。
  6. 结合文档尝试编写代码。

注意:API是概念,API帮助文档是操作手册,不要混为一谈。

键盘录入字符串

使用Scanner类可以从键盘接收字符串数据。常用方法有两个:
next():遇到空格或制表符(tab)就停止读取,可能造成数据丢失。
nextLine():以回车换行符作为结束标记,可以完整读取一行数据。

代码示例:

import java.util.Scanner;
 
public class Demo1Scanner {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();   // 使用nextLine完整读取 
        System.out.println(s);
    }
}

注意事项:
当同时使用 nextInt() 和 nextLine() 时,nextLine() 会读取到前一个输入遗留的回车换行符,导致无法正常接收新数据。此时可以统一使用 next() 来接收字符串,或者额外调用一次 nextLine() 清除缓冲区。但在实际开发中,键盘录入主要用于学习阶段,真正项目中数据采集会通过网页表单等方式实现。

String类概述

String 类位于java.lang包下,该包是核心包,使用其中的类时不需要手动导包。

特点:

  1. 所有双引号字符串都是String类的对象。例如 “abc” 就是一个String对象,可以直接调用String的方法。
  2. 字符串是常量,创建后不可更改。对字符串的修改实际上是重新创建了一个新的字符串对象并让变量指向它,原字符串内容并未发生改变。
public class Demo1String {
    public static void main(String[] args) {
        String s1 = "abc123";
        System.out.println(s1.length());   // 6 
 
        s1 = "def";   // s1指向了新的对象,原"abc123"对象不变 
        System.out.println(s1);
    }
}

String类的常见构造方法

构造方法说明
new String()创建空白字符串对象
new String(char[] chs)根据字符数组创建字符串
new String(String original)根据传入的字符串创建新对象
String s = “abc”;直接双引号赋值(最常用)

代码示例:

public class Demo2StringConstructor {
    public static void main(String[] args) {
        String s1 = new String();               // 空字符串 
        System.out.println(s1);
 
        char[] chs = {'a', 'b', 'c'};
        String s2 = new String(chs);            // 由字符数组构造 
        System.out.println(s2);
 
        String s3 = new String("123");          // 根据字面值构造 
        System.out.println(s3);
    }
}

注意:打印String对象时,输出的是字符串内容而不是内存地址,这是String类特殊处理的结果

创建字符串对象的区别对比

双引号直接创建 —— 字符串常量池
使用双引号创建的字符串对象会存储在字符串常量池中
JVM会先检查常量池中是否已存在相同内容的字符串:

  • 如果不存在,则创建新对象并放入常量池;
  • 如果存在,则直接复用已有对象

new构造方法创建 —— 堆内存
每次使用new都会在堆内存中开辟新空间,即使内容相同,地址也不同

new方式

s3 = new String('abc')

堆内存分配新空间

s4 = new String('abc')

堆内存再次分配新空间

s3 指向堆地址1

s4 指向堆地址2

双引号方式

不存在

已存在

s1 = 'abc'

常量池检查

在常量池创建 'abc'

直接复用

s1 指向常量池地址

s2 指向同一常量池地址

代码验证

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);   // true,常量池复用 
 
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4);   // false,堆中不同对象 

String的特点与常见面试题

1 ) 特点总结
Java中所有双引号字符串都是String类的对象。
字符串不可变,值创建后不能修改。
字符串可以共享(常量池机制)。

2 ) 常见面试题分析

题目1:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);   // true 

分析:s2创建时找到常量池已有"abc",直接复用。

题目2:

String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);   // false 

分析:s1指向常量池,s2指向堆内存,地址不同。而且 new String(“abc”) 实际创建了两个对象:常量池中的"abc"和堆中的new对象。

题目3:

String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3);   // false 

分析:当字符串拼接中包含变量时,底层会使用StringBuilder的append方法拼接,再调用toString生成新的String对象,该对象在堆内存中,与常量池中的"abc"地址不同。

题目4:

String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);   // true 

分析:三个常量直接拼接,Java存在常量优化机制,编译时自动合并为"abc",所以s2同样指向常量池中的对象。

字符串的比较

使用 == 比较基本数据类型时比较的是数值,比较引用数据类型时比较的是地址值。
因此,比较字符串内容时不应该使用 ==,而应使用以下方法:

  • equals(Object obj):区分大小写地比较内容是否相同。
  • equalsIgnoreCase(String str):忽略大小写比较内容是否相同。

示例:

String s1 = "abc";
String s2 = "ABC";
System.out.println(s1.equals(s2));              // false 
System.out.println(s1.equalsIgnoreCase(s2));    // true 

案例:用户登录

需求: 已知用户名和密码,程序模拟用户登录,最多3次机会,登录成功或失败给出相应提示

实现思路:

  1. 定义已知用户名和密码(字符串常亮)。
  2. 键盘录入用户名和密码。
  3. 使用equals比较内容是否相同。
  4. 使用for循环控制3次机会,登录成功使用break提前结束

代码:

import java.util.Scanner;
 
public class Test1 {
    public static void main(String[] args) {
        String username = "admin";
        String password = "123456";
 
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入用户名:");
            String scUsername = sc.nextLine();
            System.out.println("请输入密码:");
            String scPassword = sc.nextLine();
 
            if (username.equals(scUsername) && password.equals(scPassword)) {
                System.out.println("登录成功");
                break;
            } else {
                if (i == 3) {
                    System.out.println("登录次数已达上限,请明天再来");
                } else {
                    System.out.println("登录失败,您还剩余" + (3 - i) + "次机会");
                }
            }
        }
    }
}

字符串的遍历

遍历字符串即逐个获取其中的每一个字符。

1 ) 方法一:charAt + length

String s = "itheima";
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    System.out.println(c);
}

2 ) 方法二:toCharArray

String s = "itheima";
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
    System.out.println(chars[i]);
}

推荐第二种方式,先将字符串转换为字符数组,再遍历数组,思路更清晰。

统计字符次数

需求: 键盘录入一个字符串,统计其中大写字母、小写字母、数字字符的出现次数

思路:

  1. 录入字符串,转换为字符数组
  2. 定义三个计数器
  3. 遍历字符,根据ASCII范围判断字符类型并累加

代码:

import java.util.Scanner;
 
public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        int bigCount = 0, smallCount = 0, numCount = 0;
 
        char[] chars = s.toCharArray();
        for (char c : chars) {
            if (c >= 'A' && c <= 'Z') {
                bigCount++;
            } else if (c >= 'a' && c <= 'z') {
                smallCount++;
            } else if (c >= '0' && c <= '9') {
                numCount++;
            }
        }
        System.out.println("大写字母:" + bigCount);
        System.out.println("小写字母:" + smallCount);
        System.out.println("数字:" + numCount);
    }
}

手机号屏蔽 —— 字符串截取

需求: 将手机号中间四位替换为 ****,如 15612341234 → 156****1234

截取方法:

  • substring(int beginIndex):从beginIndex截取到末尾。
  • substring(int beginIndex, int endIndex):截取[beginIndex, endIndex)区间,包含头不包含尾

实现:

Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String tel = sc.nextLine();
String start = tel.substring(0, 3);    // 前三位 
String end = tel.substring(7);         // 后四位 
System.out.println(start + "" + end);

敏感词替换 —— 字符串替换

需求: 将字符串中的敏感词 “TMD” 替换为 *

方法:

  • String replace(CharSequence target, CharSequence replacement):用新值替换旧值,返回新字符串。

代码:

Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
String s = sc.nextLine();
String result = s.replace("TMD", "***");
System.out.println(result);

切割字符串

需求: 输入学生信息(如 “张三,23”),切割出姓名和年龄并封装为Student对象。

方法:

  • String[] split(String regex):根据传入的正则表达式切割字符串,返回字符串数组。

步骤:

  1. 创建Student实体类(domain包下)。
  2. 录入字符串,用逗号切割。
  3. 取出数组元素,通过构造器封装对象并输出。

Student类:

public class Student {
    private String name;
    private String age;
    // 空参、有参构造、getter/setter 省略 
}

主程序:

Scanner sc = new Scanner(System.in);
System.out.println("请输入学生信息:");
String stuInfo = sc.nextLine();
String[] arr = stuInfo.split(",");
Student stu = new Student(arr[0], arr[1]);
System.out.println(stu.getName() + "..." + stu.getAge());

String常用方法总结

方法名说明
equals(String)比较字符串内容(区分大小写)
equalsIgnoreCase(String)比较内容(忽略大小写)
length()返回字符串长度(字符个数)
charAt(int index)返回指定索引处的字符
toCharArray()将字符串转为字符数组
substring(int begin)从begin截取到末尾
substring(int begin, int end)截取[begin, end)范围内的子串
replace(old, new)用new替换所有old,返回新字符串
split(String regex)根据正则切割字符串,返回数组

总结

本文从API概念入手,逐步讲解了String类的特性、构造方法、常量池机制、常用方法,并通过案例加深理解

Java基础知识9【api&String&arraylist】 1、string是什么?可以做什么?2、string创建对象的方式?1、string是什么?可以做什么?各位同学,接下来我们学习String这个类,也就是学对字符串进行处理。为什么要学习字符串处理呢?因为在开发中对于字符串的处理还是非常常见的。比如:在用户登录时,用户输入的用户名和密码送到后台,需要和正确的用户名和密码进行校验,这就需要用到String类提供的比较功能。再比如:同学们在直播留言时,有些小伙伴可能不太文明说了一些脏话,后台检测到你输入的是脏话,就会用***把脏话屏蔽掉。 阅读详情

相关推荐

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1187

视频教程-JavaSE基础视频精讲⑫:String,StringBuilder和StringBuffer-Java

JavaSE基础视频精讲⑫:String,StringBuilder和StringBuffer ...

weixin_32712827的博客 134

别再一个个BAPI调了!用CVI_EI_INBOUND_MAIN一次性搞定SAP BP主数据(附完整ABAP代码)

本文详细介绍了如何使用SAP标准函数CVI_EI_INBOUND_MAIN高效维护业务伙伴(BP)主数据,替代传统的多BAPI调用方式。通过完整ABAP代码示例,展示了如何一站式处理供应商、客户、公司代码等所有视图的创建与更新,提升数据一致性和开发效率。

weixin_29204205的博客 300

java raw字符串_GitHub - xiyuan-fengyu/template-string: raw-string-literals and string-interpolation for...

template-string快速开始创建一个新项目,通过maven管理jar依赖。在pom.xml中添加依赖com.github.xiyuan-fengyutemplate-string1.0.3org.freemarkerfreemarker2.3.28编写一个用于测试的类import com.xiyuan.templateString.EnableTemplateString;import ...

weixin_39964978的博客 365

SLAM算法的优缺点

SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)算法是一种通过传感器数据实时估计机器人自身位置和构建环境地图的技术。

selenia8860的博客 2907

基于ProXmoX VE的虚拟化家庭服务器(篇一)—ProXmoX VE 安装及基础配置

ProxmoxVE是一款套开源的虚拟化管理软件,用户可通过网页的方式来管理服务器上使用kvm以及lxc技术运行的虚拟机。同时提供了一些先进功能的支持,如集群、HA等。PVE虽然是开源,却是由一个商业公司在运营、更新以及维护。...

隔壁老瓦的专栏 6322

String类和ArrayList类API

String类和ArrayList类API ,String的常用方法 ,ArrayList常用方法

m0_69027602的博客 188

基于YOLOv8n的FPGA无PS端PL部署完整实现方案

本文提出了一种将YOLOv8n目标检测模型完整部署到FPGA纯PL端的实现方案。通过PyTorch训练和INT8量化技术,结合Vitis AI工具链,将模型转换为适合FPGA实现的硬件描述。方案详细阐述了从模型训练、量化校准到FPGA硬件设计的全流程,重点解决了无PS端部署的架构设计、资源优化和实时性保障等关键技术挑战。实验结果表明,该方案在Xilinx Virtex-690T FPGA上实现了30FPS以上的实时目标检测性能,为边缘计算场景提供了高效的硬件加速解决方案。

huanghm88的专栏 510

2021-01-16

一周掌握 Java 入门知识 学习内容: Java大数据基础知识(三) 前言 学习 JAVA 大数据:“钱”景无限 文章目录 一:字符串拼接 二:Scanner 类 三:if -else 条件语句 四:总结 一:字符串拼接 a. String类 定义:String是类,但类不是基本数据类型,类是引用类型。 String类型其实并不是基本类型,但是它是如此广泛的被使用,常常被误以为是一种基本类型。String类型是Immutable(不可变的)的,一旦创建就不能够被改变。 被双引号

weixin_48924025的博客 150

大模型系列——一文看懂“提示词” vs “提示词工程” vs “上下文工程”

本文区分了AI领域的三个关键概念:提示词(Prompt)、提示词工程(Prompt Engineering)和上下文工程(Context Engineering)。提示词是直接输入给AI模型的指令文本;提示词工程则是系统化设计、测试和优化提示词的过程;而上下文工程是为AI构建动态上下文,提供恰当信息和工具的科学与艺术。文章通过翻译案例展示了提示词工程的迭代过程,并说明上下文工程在AI Agent中的核心作用——动态收集和组织必要信息。最后强调普通人只需掌握提示词编写,开发AI应用才需深入提示词工程,构建智能

2401_84052244的博客 750

麒麟操作系统提示“默认密钥环已上锁”的解决办法

麒麟操作系统提示“默认密钥环已上锁”的解决办法

太极淘的博客 1万+

新手福音:告别繁琐配置,在快马平台零门槛写出第一个java程序

因为我们的程序是一个可以持续运行、等待用户交互的控制台应用(虽然简单,但符合持续交互的特征),你只需要点一下部署按钮,它就能生成一个独立的可访问链接。你只需要把上面我们讨论的代码逻辑,一行行写进去(或者直接修改它提供的示例),然后点击运行按钮,马上就能在右边看到程序运行的效果,直接输入名字和年龄进行互动。接着,它会询问你的年龄,并根据不同的年龄段,给出贴心的、鼓励的学习寄语。不过,现在情况不一样了。这个程序不仅能打招呼,还能和你互动,根据你的输入给出不同的反馈,让你立刻感受到编程的乐趣。

BlackironLynx23的博客 179

3.摄像头组件- CVP (ISP)

本文介绍 车载摄像头组件-ISP

2401_83458819的博客 1618

【Java】快速入门String类

根据博主本人知识以及参考书籍《Java核心技术 卷一》,我对Java编程基础中的字符串String类以及一些基本操作进行了整理,希望能够帮到正在学习或复习Java语法的你。

2401_88030885的博客 690

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【重生之Java零基础快速入门】

Java是一种面向对象的编程语言,由Sun Microsystems于1995年发布。希望这份详细的教程能帮助你快速入门Java编程!如果有任何问题,欢迎随时提问!

z17826856787的博客 1769

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JAVA字符串前补零和后补零的快速方法

JAVA字符串前补零和后补零的快速方法 String fileName = "130181"; System.out.println("================ 前补零方法一 ================="); DecimalFormat g1=new DecimalFormat("0000000"); Stri...

凌大大的博客 9万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java字符串(String、字符串拼接、原理)

Java字符串(String、字符串拼接、原理) String 是一个用于表示字符串的类。String 对象是不可变的,这意味着一旦创建了一个字符串对象,它的值就不能被改变。 `StringBuilder`是Java中用于处理可变字符串的类。 Stringjoiner:特定的分隔符构建字符串序列,用来连接字符串

m0_74154295的博客 2615

Java字符串操作:从入门到精通

本文系统介绍了Java字符串的核心知识,包括String类的不可变特性、常用操作方法(如比较、修改、搜索等)、性能优化技巧以及StringBuilder的使用。通过生活化比喻和代码示例,帮助初学者理解字符串基础概念和常见误区,如不可变性导致的性能问题、==与equals的区别等。文章还提供了字符串异常处理和动手练习,包含基础操作和进阶任务(如用户名验证和反转),并附参考代码。最后总结字符串使用的最佳实践,强调根据场景选择String或StringBuilder。

ldb765422438的博客 983

Java快速入门(19) - String类详解

关注公众号「小白轻松学编程」获取更多学习资源!

2596

Java的字符串的基础知识(必看)

运行结果:这几行代码展示了Java中对字符串(String)对象的操作。首先,代码创建了一个名为name的字符串变量,并将其初始化为"123",即。接下来,代码将字符串变量name的值修改为"456",即。在Java中,字符串是不可变的(immutable),这意味着一旦创建了一个字符串对象,就无法修改它的值。但是,当我们修改字符串变量时,实际上是创建了一个新的字符串对象,并将变量指向新的对象。最后,代码使用方法将字符串变量name的值打印到控制台。由于name。

2301_80142564的博客 2080

Java零基础快速入门

这篇Java基础复习笔记系统整理了Java核心知识点,主要包含以下内容: 核心特性:封装(属性私有+公共方法)、继承(IS-A关系)、多态(编译时重载/运行时重写)三大面向对象特性,以及编译运行机制。 基础语法:访问权限控制、开发环境组成、8种基本数据类型与缓冲池机制、字符串特性与相关类对比、变量分类及运算符使用。 关键字解析:final(不可变性)、static(类共享成员)、this/super(对象引用)、instanceof(类型判断)等关键字的用法和限制。 面向对象核心:类与对象关系、继承与重写规

weixin_47759174的博客 694

Java将字符串转化为数组_java 字符串转数组,零基础入门到精通,收藏这篇就够了

将字符串转化成数组提供两种方法:2.toCharArry()方法;将字符串转化为Sting数组时,可以使用split()将字符串转化为char数组时,可以使用toCharArry()

Python_0011的博客 764

JAVA:String类详解(快速掌握String的使用)

本文介绍了Java中String类的基本使用方法。主要内容包括:1 String的多种创建方式,如直接赋值、构造方法、字符/字节数组转换等;2 String比较方法,重点解析了equals方法的实现逻辑;3 常用字符串操作方法,如equals、length、indexOf、split等。文章还指出String具有不可变性,所有字符串操作实际上会创建新对象。建议在比较字符串时让字面量调用equals方法以避免空指针异常。

2302_81095897的博客 1585

Redis快速入门:从基础到Java客户端实践

Redis是一款高性能键值型NoSQL数据库,本文从基础概念到Java客户端实践进行了全面介绍。首先对比了NoSQL与传统关系型数据库的区别,阐述了Redis基于内存、单线程原子性、低延迟等核心特性。详细讲解了Linux环境下Redis的安装配置步骤,包括编译安装、后台启动和开机自启设置。针对日常使用,重点解析了通用命令和String类型操作,如KEYS、SET/GET、INCR等,并强调生产环境注意事项。最后还介绍了命令行和图形化客户端工具的使用方法,为Java开发者后续集成提供了基础。通过本文,读者可以

超级小狗的博客 998

java String字符串的获取相关的方法 基础

这里介绍四种: String 当中与获取相关常用方法有: public int length():获取字符串当中含有的字符个数,拿到字符串长度。 int length() 返回此字符串的长度。 public string concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串 String concat(...

Q791425037的博客 372

[Java教程]10.String字符串类基本学习使用

Java教程专栏:https://blog.youkuaiyun.com/qq_41806966/category_9929686.html 这篇讲String,会让大家了解一下什么是字符串,以及常用操作,和了解对象以及char 目录 String String是一个类 创建一个String 判断字符串相等 判断字符串里是否有指定内容 获取字符串的指定字符(char) 获取指定字符的下标 练习 String String 是Java中的一个类( class ) 是一种引用类型,比如我们使用

砷碲 - Shendi 7383
上一篇: Java基础快速入门: 面向对象核心基础
下一篇: Java基础快速入门:StringBuilder详解
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值