当前位置: 首页 > news >正文

Java 字符串

文章目录

    • 一、API
    • 二、String
      • 1. String 构造方法
      • 2. String 对象的特点
      • 3. 字符串的比较
      • 4. 用户登录案例
      • 5. 遍历字符串
      • 6. 统计字符次数
      • 7. 拼接字符串
      • 8. 字符串反转
    • 三、StringBuilder
      • 1. 构造方法
      • 2. 添加及反转方法
      • 3. 与 String 相互转换
      • 4. 拼接字符串升级版
      • 5. 字符串反转升级版

一、API

API:即应用程序编程接口。
Java API:指的就是 JDK 中提供的各种功能的 Java 类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些 API 如何使用。

jdk11 API 帮助文档中文版下载步骤!

二、String

String 类在 java.lang 包下,所以使用的时候不需要导包。
String 类代表字符串,Java 程序中的所有字符串文字(例如 “abc”)都被实现为此类的实例,也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。

字符串的特点:
① 字符串是不可变的,它们的值在创建后不能被更改;
② 虽然String 的值是不可变的,但是它们可以被共享;
③ 字符串效果上相当于字符数组,但是底层原理是字节数组。

1. String 构造方法

在这里插入图片描述

//1.创建一个空白字符串对象,不含任何内容
String s1 = new String();
//2.根据字符数组的内容,来创建字符串对象
char[] chs = {'a', 'b', 'c'};
String s2 = new String(chs);
System.out.println(s2); //abc
//3.根据字节数组的内容,来创建字符串对象
byte[] bys = {97, 98, 99};
String s3 = new String(bys);
System.out.println(s3); //abc
//4.直接赋值的方式创建字符串对象
String s4 = "abc";
System.out.println(s4); //abc

s3 的输出结果为什么是 abc 呢?
ASCLL码,数字的 97、98、99 依次对应字符的 a、b、c。

推荐使用直接赋值的方式得到字符串!

2. String 对象的特点

(1)通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值是不同的;

(2)以双引号的方式给出的字符串,只要字符序列相同(顺序及大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中进行维护。

3. 字符串的比较

使用 == 做比较:
对于基本类型,比较的是数据值是否相同;
对于引用类型,比较的是地址值是否相同。

而我们的字符串是一个类,所以它的对象做等号比较的时候比较的也是地址值是否相同,我们如果想要比较字符串的内容是否相同,又该怎么做呢?

字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫 equals()
public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串

//比较地址是否相同
System.out.println(s1 == s2); //false
//比较内容是否相同
System.out.println(s1.equals(s2)); //true

4. 用户登录案例

需求:已知用户名和密码,请用程序实现模拟用户登录,总共有三次机会,登录之后给出相应提示。

思路:
① 已知用户名和密码,定义两个字符串表示即可;
② 键盘录入要登录的用户名和密码,用 Scanner 实现;
③ 拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示,对于字符串内容的比较,用 equals() 方法实现;
④ 用循环实现多次机会,这里的次数明确,采用 for 循环实现,并在登录成功的时候,使用 break 结束循环。

package com.zxe;import java.util.Scanner;public class login {public static void main(String[] args) {String username = "tyut520";String password = "123456";Scanner sc = new Scanner(System.in);for (int i = 0; i < 3; i++) {System.out.println("请输入用户名:");String name = sc.nextLine();System.out.println("请输入密码:");String pwd = sc.nextLine();if (name.equals(username) && pwd.equals(password)) {System.out.println("登录成功!");break;} else {if (i == 2) {System.out.println("您的账号已锁定!");} else {System.out.println("登录失败,您还有" + (2 - i) + "次机会!");}}}}
}

在这里插入图片描述

5. 遍历字符串

//遍历字符串的通用格式
for (int i = 0; i < s.length(); i++) {System.out.print(s.charAt(i)); //输出指定索引处的字符值
}

charAt() 方法返回指定索引处的 char 值,数组名.length 返回数组的长度,字符串对象.length() 返回字符串的长度!

6. 统计字符次数

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

package com.zxe;import java.util.Scanner;public class login {public static void main(String[] args) {int bigCount = 0;int smallCount = 0;int numberCount = 0;Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串:");String s = sc.nextLine();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (ch >= 'A' && ch <= 'Z') {bigCount++;} else if (ch >= 'a' && ch <= 'z') {smallCount++;} else if (ch >= '0' && ch <= '9') {numberCount++;}}System.out.println("大写字母有" + bigCount + "个!");System.out.println("小写字母有" + smallCount + "个!");System.out.println("数字有" + numberCount + "个!");}
}

在这里插入图片描述

7. 拼接字符串

需求:定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。

package com.zxe;import java.util.Arrays;
import java.util.Scanner;public class login {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] str;System.out.println("请输入一组整数,以逗号分隔:");str = sc.nextLine().split(",");int[] arr = new int[str.length];for (int i = 0; i < arr.length; i++) {arr[i] = Integer.valueOf(str[i]);}/*以数组的格式打印数组System.out.println(Arrays.toString(arr));*/String result = together(arr);System.out.println(result);}public static String together(int[] arr) {String s = "<";for (int i = 0; i < arr.length; i++) {s += arr[i];if (i == arr.length - 1) {s += ">";} else {s += ", ";}}return s;}
}

在这里插入图片描述

java 中可以直接输入字符串数组,但是输入 int[] 数组时需要事先定义长度,但有些题目中的长度是可变的,不能事先固定数组长度。首先输入字符串的数组,中间用逗号分隔,然后获取字符串长度,作为 int[] 初始数组的长度,再将 String 字符串数组转化为 int 数组。

8. 字符串反转

需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果。

package com.zxe;import java.util.Arrays;
import java.util.Scanner;public class ReverseTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串:");String s = sc.nextLine();String result;result = reverse(s);System.out.println(result);}public static String reverse(String s) {String ss = "";for (int i = s.length() - 1; i >= 0; i--) {ss += s.charAt(i);}return ss;}
}

三、StringBuilder

如果对字符串进行拼接操作,每次拼接,都会构建一个新的 String 对象,既耗时,又浪费内存,而这种操作还不可避免。
那么有没有一种比较好的方式可以解决这个问题呢?答案是肯定的,我们可以通过 Java 提供的 StringBuilder 类来解决这个问题。

StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的。

String 内容不可变,而StringBuilder 内容是可变的!

1. 构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象
StringBuilder sb = new StringBuilder("hello");
System.out.println(sb); //hello
System.out.println(sb.length()); //5

2. 添加及反转方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = sb.append("hello");
System.out.println(sb); //hello
System.out.println(sb2); //hello
System.out.println(sb == sb2); //true

sb 和 sb2 是同一个对象!

因为返回的是对象本身,且可以传任意类型的数据,所以这里我们就不需要再用 StringBuilder 来接收了。

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append("world");
sb.append("java");
sb.append(99);
System.out.println(sb); //helloworldjava99//也可以使用链式编程
sb.append("hello").append("world").append("java").append(99);
System.out.println(sb); //helloworldjava99
StringBuilder sb = new StringBuilder("hello");
sb.reverse(); //olleh

3. 与 String 相互转换

//1.StringBuilder转换为String,toString()
StringBuilder sb = new StringBuilder();
sb.append("hello");
String s = sb.toString(); //2.String转换为StringBuilder,构造方法
String s = "hello";
StringBuilder sb = new StringBuilder(s);

4. 拼接字符串升级版

在方法中用 StringBuilder 进行拼接,并把结果转换成 String 类型返回。

package com.zxe;import java.util.Arrays;
import java.util.Scanner;public class Test {public static void main(String[] args) {int[] arr = {1, 2, 3};String result = arrToString(arr);System.out.println(result);}public static String arrToString(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("<");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append(">");String s = sb.toString();return s;}
}

在这里插入图片描述

5. 字符串反转升级版

在方法中用 StringBuilder 实现字符串的反转,并把结果转换成 String 返回。

package com.zxe;import java.util.Arrays;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串:");String str = sc.nextLine();String result = reverse(str);System.out.println(result);}public static String reverse(String s) {StringBuilder sb = new StringBuilder(s);sb.reverse();String ss = sb.toString();return ss;}
}

相关文章:

Java 字符串

文章目录一、API二、String1. String 构造方法2. String 对象的特点3. 字符串的比较4. 用户登录案例5. 遍历字符串6. 统计字符次数7. 拼接字符串8. 字符串反转三、StringBuilder1. 构造方法2. 添加及反转方法3. 与 String 相互转换4. 拼接字符串升级版5. 字符串反转升级版一、A…...

麦克风阵列波束基本概念理解

波束形成 本质上是设计合适的滤波器&#xff0c;对于一类固定滤波器系数的阵列来说&#xff0c;无论输入信号或者噪声信号的统计特征如何&#xff0c;其滤波器系数固定不变&#xff0c;此类波束形成叫Fixed Beamforming&#xff0c;固定波束形成好比传统数字信号处理里面的经典…...

JAVA保姆式JDBC数据库免费教程之02-连接池技术

连接池 连接池概念 ​ 概念&#xff1a;其实就是一个容器(集合)&#xff0c;存放数据库连接的容器。 当系统初始化好后&#xff0c;容器被创建&#xff0c;容器中会申请一些连接对象&#xff0c;当用户来访问数据库时&#xff0c;从容器中获取连接对象&#xff0c;用户访问完…...

视频片段怎么做成gif图?快试试这2种方法

动态gif图片作为当下非常常用的表情包&#xff0c;其丰富的内容生动的画面深受大众喜爱。那么&#xff0c;当我们想要将电影或是电视剧中的某一片段做成gif动态图片的时候&#xff0c;要如何操作呢&#xff1f;接下来&#xff0c;给大家分享两招视频转化gif的小窍门–使用【GIF…...

2.20计算机如何工作

一.计算机组成1.冯诺依曼体系CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备内存和外存的区别(面试)访问速度:内存快,外存慢存储空间:内存小,外…...

[golang gin框架] 5.Cookie以及Session

1.Cookie(1).介绍HTTP 是无状态协议,简单地说&#xff0c;当浏览了一个页面&#xff0c;然后转到同一个网站的另一个页面&#xff0c;服务器无法认识到这是同一个浏览器在访问同一个网站,每一次的访问&#xff0c;都是没有任何关系的,如果要实现多个页面之间共享数据的话就可以…...

【牛客刷题专栏】0x0B:JZ3 数组中重复的数字(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录前言问题…...

js中的隐式类型转换有哪些

目录一、隐式类型转换条件二、 的隐式类型转换三、 的隐式类型转换四、object 的隐式类型转换探讨 object 的隐式转换执行顺序探讨 Symbol.toPrimitive 属性如何将对象转换为原始值在前端js这门动态弱类型语言中&#xff0c;不仅存在着显示类型转换&#xff0c;还存在许多隐式类…...

WuThreat身份安全云-TVD每日漏洞情报-2023-02-17

漏洞名称:IBM Aspera Faspex 预身份验证 RCE 漏洞 漏洞级别:高危 漏洞编号:CVE-2022-47986 相关涉及:IBM Aspera Faspex 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-02805 漏洞名称:Kardex Mlog MCC PATH 遍历 漏洞级别:严重 漏洞编号:CVE…...

掌握MySQL分库分表(三)水平分库分表常见策略range、hash

文章目录range策略Range策略延伸基于Range范围分库分表业务场景hash取模案例规则水平分库分表&#xff0c;根据什么规则进行划分&#xff1f; range策略 自增id&#xff0c;根据ID范围进行分表&#xff08;左闭右开&#xff09; 规则案例&#xff1a; 1~1,000,000 是 table…...

CTFer成长之路之CTF中的SQL注入

CTF中的SQL注入CTF SQL注入 SQL注入-1 题目描述: 暂无 docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-sql-1:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{union_select_is_so_cool} Wri…...

python snap7读写PLC

主要在DB块里操作 读DB块 import snap7 import structdef plc_connection():PLC_IP 192.168.10.10PLC snap7.client.Client()PLC.connect(PLC_IP, rack0, slot1)return PLCPLC plc_connection()PLC.read_area()方法从PLC中读取指定区域的数据。 1200表示DB块的编号&#x…...

使用物联网进行智能能源管理的10大优势

如今&#xff0c;物联网推动了许多行业的自动化流程和运营效率&#xff0c;而物联网在能源领域的应用尤其受到消费者、企业甚至政府的关注。除了对电力供应链的诸多好处之外&#xff0c;物联网能源管理系统还让位于新的智能电网&#xff0c;并有望实现更高的安全性和效率。基于…...

工业4.0和工业物联网如何协同工作

虽然许多公司已经接受了工业物联网&#xff0c;但他们现在必须接受工业4.0对数据驱动的数字化转型的承诺。随着制造业、能源、公用事业和供应链应用迅速采用工业物联网(IIoT)&#xff0c;这些行业的新现实正在形成。工业物联网提供了企业管理数千个活动部件所需的数据类型&…...

Python机器学习入门笔记(3)—— 线性回归

目录 线性回归 算法简述 LinearRegression() API SGDRegressor API LinearRegression() 和 SGDRegressor对比 过拟合与欠拟合 岭回归 应用场景 线性回归 算法简述 线性回归是一种基本的机器学习算法&#xff0c;它用于建立自变量和因变量之间的线性关系模型。它假设…...

Java:顶级Java应用程序服务器 — Tomcat、Jetty、GlassFish、WildFly

如果你想编写Java web应用程序&#xff0c;首先需要做出一个艰难的决定&#xff1a;选择运行应用程序的Java应用程序服务器。什么是应用服务器?一般来说&#xff0c;应用程序服务器执行Java应用程序。在操作系统中启动它们&#xff0c;然后将应用程序部署到其中。将应用程序服…...

如何在SpringBoot项目上让接口返回数据脱敏,一个注解即可

1 背景需求是某些接口返回的信息&#xff0c;涉及到敏感数据的必须进行脱敏操作2 思路①要做成可配置多策略的脱敏操作&#xff0c;要不然一个个接口进行脱敏操作&#xff0c;重复的工作量太多&#xff0c;很显然违背了“多写一行算我输”的程序员规范。思来想去&#xff0c;定…...

python 之 海龟绘图(turtle)

注&#xff1a;从个人博客园移植而来 使用简介 python 2.6引入的一个简单的绘图工具&#xff0c;俗称为海龟绘图。3.x以上使用的话&#xff0c;可通过pip进行安装&#xff0c;命令为&#xff1a; pip/pip3 install turtle如果出现如下错误&#xff1a; 解决方式&#xff1a; …...

RT-Thread SPI使用教程

RT-Thread SPI 使用教程 实验环境使用的是正点原子的潘多拉开发板。 SPI从机设备使用的是BMP280温湿度大气压传感器。 使用RT-Thread Studio搭建基础功能。 1. 创建工程 使用RT-Thread Studio IDE创建芯片级的工程。创建完成后&#xff0c;可以直接编译下载进行测试。 2.…...

shiro使用——整合spring

shiro使用——整合spring 1. 引入相关配置 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.9.1</version></dependency>2. 自定义Realm类 继承AuthorizingRealm 并重写相…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...