网站建设归哪个部门/宁波网站seo公司
于是,虚度的光阴换来了模糊
—— 24.5.8
一、String基础知识以及创建
1.String介绍
1.概述
String类代表字符串
2.特点
a.Java程序中的所有字符串字面值(如“abc”)都作为此类的实例(对象)实现
凡是带双引号的,都是String的对象
String s = "abc"
"abc"就是对象,String就是对象的数据类型,s就是对象名
b.字符串是常量,它们的值在创建之后不能更改
String s ="he11o"
S += "world" —> 会产生新对象
c.String 对象是不可变的,所以可以共享
String s1 = "abc"
String s2 = "abc"
package S57String;public class Demo161String1 {public static void main(String[] args) {String s1 = "abc";String s2 = "abc";System.out.println(s1==s2); // 比较地址值 true} }
2.String的实现原理
1.jdk8的时候:String底层是一个被final修饰的char数组-> private final char[] value;
2.jdk9开始到之后:底层是一个被final修饰的byte数组-> private final byte[] value;
一个char类型占2个字节
一个byte类型占1个字节 —> 省内存空间
字将串定义完之后,数组就创建好了,被final一修饰,数组的地址值直接定死
3.String的创建
1.String() —> 利用string的无参构造创建string对象
2.String(string original) —> 根据字符串创建string对象3.String(char[] value) —> 根据char数组创建string对象
4.String(byte[] bytes) —> 通过使用平台的默认字符解码指定的 byte 数组,构造一个新的 string对象
a、平台:操作系统
b、操作系统默认字符集:GBK
GBK:一个中文占2个字节
UTF-8:一个中文占3个字节
而且,中文对应的字节一般都是负数
代码在idea中写的,idea启动的时候,会自动加一个启动参数,此启动参数为UTF-8
-Dfile.encoding5.简化形式:String 变量名 =" ”
package S57String;public class Demo162String2Create {public static void main(String[] args) { // 1.String() —> 利用string的无参构造创建string对象String s1 = new String();System.out.println("s1="+s1); // 2.String(string original) —> 根据字符串创建string对象String s2 = new String("abc");System.out.println("s2="+s2); // 3.String(char[] value) —> 根据char数组创建string对象char[] chars = {'a','b','c'};String s3 = new String(chars);System.out.println("s3="+s3); // 4.String(byte[] bytes) —> 通过使用平台的默认字符解码指定的 byte 数组,构造一个新的 string对象byte[] bytes1 = {97,98,99};String s4 = new String(bytes1);System.out.println("s4="+s4); // 三个负数代表中文,在ASCII表中找不到,所以无法正常显示byte[] bytes2 = {-97,-98,-99};String s5 = new String(bytes2);System.out.println("s5="+s5);byte[] bytes3 = {-28,-67,-96};String s6 = new String(bytes3);System.out.println("s6="+s6); // 5.简化形式:String 变量名 =" ”String s7 = "abc";System.out.println("s7="+s7);} }
1.string(char[] value,int offset,int count) —> 将char数组的一部分转成string对象
value:要转String的char数组
offset:从数组的哪个索引开始转
count:转多少个
2.string(byte[]bytes,int offset,int length) —> 将byte数组的一部分转成String对象bytes:要转String的byte数组
offset:从数组的哪个索引开始转
length:转多少个
public static void main(String[] args) {/*1.string(char[] value,int offset,int count) —> 将char数组的一部分转成string对象alue:要转String的char数组offset:从数组的哪个索引开始转count:转多少个*/char[] chars = {'a','b','c','d','e','f'};String s1 = new String(chars,1,5);// 从索引1开始转5个System.out.println("s1="+s1);/*2.string(byte[]bytes,int offset,int length) —> 将byte数组的一部分转成String对象bytes:要转String的byte数组offset:从数组的哪个索引开始转length:转多少个*/byte[] bytes = {97,98,99,100,101};String s2 = new String(bytes,0,4);System.out.println(s2);}
笔试题
题1
s1与s2地址值一样,s3内容是s1共享过来,但是s3是new出来的,会自己创造新的空间,所以会有新的空间
问1:Strings=new String("abc")共有几个对象?
2个,一个new本身,一个是"abc”
问2:Strings= new String("abc")共创建了几个对象?
1个或者2个,就看abc有没有提前创建出来了
如果之前没有提前创建abc,那么就会创建2个,先创建abc,再new
如果之前提前创建了abc了,那么String s = new String("abc"),就只创建了一个,因为abc不用单独再创建了,直接共享过来即可
String s1 = "abc"
String s2 = new String("abc")题2
总结
1.字符串拼接,如果等号右边是字符串字面值拼接,不会产生新对象
2.字符串拼接,如果等号右边有变量参数拼接,会产生新字符串对象
二、String常用方法
1.判断方法
boolean equals(String s) —> 比较字符串内容
boolean equalsIgnoreCase(String s) —> 比较字符串内容,忽略大小写示例
public static void main(String[] args) {String s1 = "abc";String s2 = new String("abc");String s3 = "Abc";System.out.println(s1==s2); // 比较地址值 falseSystem.out.println(s1.equals(s2));// 比较内容 trueSystem.out.println(s3.equals(s1));// 比较内容 不忽略大小写 falseSystem.out.println(s3.equalsIgnoreCase(s1));// 比较内容 忽略大小写 true}
练习
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录成功与否,给出相应的提示步骤:
①先定义两个字符串,表示注册过的用户名和密码
②创建scanner对象,键盘录入用户名和密码
③比较,如果输入的用户名和密码跟已经注册过的用户名和密码内容一样,就登录成功,否则就登录失败public static void main(String[] args) { // ① 先定义两个字符串,表示注册过的用户名和密码String username = "root";String password = "954926928"; // ② 创建scanner对象,键盘录入用户名和密码for (int i = 0; i < 3; i++) {Scanner sc = new Scanner(System.in);System.out.println("请您输入用户名");String ans = sc.next(); // ③ 比较,如果输入的用户名和密码跟已经注册过的用户名和密码内容一样,就登录成功,否则就登录失败if (ans.equals(username)) {System.out.println("请您输入用户密码");String que = sc.next();if (que.equals(password)) {System.out.println("登陆成功!");break;} else {System.out.println("密码错误,请重新登录");}} else {System.out.println("没有找到用户,请先注册账户");}}}
用确定的值.equals,这样可以防止空指针
Objects中的equals方法,自带防止空指针
即使是两个指针都为null,也会判断成一样的
2.获取功能
① int length()->获取字符串长度
② String concat(Strings)->字符串拼接,返回新串儿
③ char charAt(int index)-> 根据索引获取对应的字符
④ int indexof(string s)->获取指定字符串在大字符串中第一次出现的索引位置
⑤ String substring(int beginIndex)->截取字符串,从指定索引开始截取到最后,返回新串儿
⑥ String substring(int beginIndex,int endIndex)->截取字符串,从beginIndex开始到endIndex结束,含头不含尾,返回新串儿
示例
public static void main(String[] args) {// ① int length()->获取字符串长度System.out.println("一切都会好的".length());// ② String concat(Strings)->字符串拼接,返回新串儿String S1 = "一切都会好的";String S2 = "我一直相信";System.out.println(S1.concat(S2));// ③ char charAt(int index)-> 根据索引获取对应的字符System.out.println(S1.charAt(4));// ④ int indexof(string s)->获取指定字符串在大字符串中第一次出现的索引位置System.out.println(S1.concat(S2).indexOf("信"));// ⑤ String substring(int beginIndex)->截取字符串,从指定索引开始截取到最后,返回新串儿System.out.println(S1.concat(S2).substring(2));// ⑥ String substring(int beginIndex,int endIndex)->截取字符串,从beginIndex开始到endIndex结束,含头不含尾(括号左开右闭),返回新串儿System.out.println(S1.concat(S2).substring(3,6));System.out.println("——————————————————————————————————————");for (int i = 0; i < S1.concat(S2).length(); i++) {System.out.println(S1.concat(S2).charAt(i));}}
3.转换功能
1.char[] tocharArray() —> 将字符串转成char数组
2.byte[] getBytes() —> 将字符串转成byte数组
3.String replace(CharSequence c1,CharSequence c2) —> 替换字符
CharSequence —> String的接口
4.byte[] getBytes(String charsetName) —> 按照指定的编码将字符串转成byte数组示例:
public static void main(String[] args) throws UnsupportedEncodingException {// 1.char[] tocharArray() —> 将字符串转成char数组String s = "abcdef";char[] chars = s.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.println(chars[i]);}System.out.println("————————————————————");// 2.byte[] getBytes() —> 将字符串转成byte数组byte[] bytes = s.getBytes();for (int i = 0; i < bytes.length; i++) {System.out.println(bytes[i]);}System.out.println("————————————————————");// 3.String replace(CharSequence c1,CharSequence c2) —> 替换字符 CharSequence —> String的接口System.out.println(s.replace("a","z"));System.out.println("————————————————————");// 4.byte[] getBytes(String charsetName) —> 按照指定的编码将字符串转成byte数组byte[] bytes1 = "一切都会好的".getBytes("utf-8");for (int i = 0; i < bytes1.length; i++) {System.out.println(bytes1[i]);}}
练习
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
步骤:
1.创建scanner对象,键盘录入
2.定义三个变量,用来统计
3.调用next方法录入一个字符串,遍历字符串,将每一个字符拿出来
4.统计大写字母A-Z -> 65-90
比如:B -> 66 -> 在65-90之间,证明就是大写字母
5.统计小写字母
a-z -> 97-122
比如:b->98->在97-122之间,证明就是小写字母6.统计数字:
0-9 -> 48-57
比如:字符1->49->在48-57之间,证明就是数字7.将统计结果打印出来
package S57String;import java.util.Scanner;public class Demo168String8Practice {public static void main(String[] args) { // 1.创建scanner对象,键盘录入Scanner sc = new Scanner(System.in); // 2.定义三个变量,用来统计int big = 0;int small = 0;int number = 0; // 3.调用next方法录入一个字符串,遍历字符串,将每一个字符拿出来String data = sc.next();char[] chars = data.toCharArray();for (int i = 0; i < chars.length; i++) {char num = chars[i];// 4.统计大写字母 // A-Z -> 65-90 // 比如:B->66->在65-90之间,证明就是大写字母if (num >= 'A' && num <= 'Z') {big++;} // 5.统计小写字母 // a-z-> 97-122 // 比如:b->98->在97-122之间,证明就是小写字母if (num >= 'a' && num <= 'z') {small++;} // 6.统计数字: // 0-9 -> 48-57 // 比如:字符1T>49 ->在48-57之间,证明就是数字if (num >= '0' && num <= '9') {number++;}} // 7.将统计结果打印出来System.out.println("大写有:"+big);System.out.println("小写有:"+small);System.out.println("数字有:"+number);} }
4.分割功能
1.String[] split(String regex) —> 按照指定的规则分割字符串
注意:regex写的是正则表达式->,在正则表达式中代表任意一个字符
示例:
public class Demo169String9Cut {public static void main(String[] args) {String s = "abc,txt";// 按照逗号进行分割String[] split = s.split(",");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}}
按照.切割切不出来,需要用\\转义
其他功能
1.boolean contains(string s) —> 判断老串儿中是否包含指定的串儿
2.boolean endsWith(string s) —> 判断老串儿是否以指定的串儿结尾
3.boolean startsWith(string s) —> 判断老串儿是否以指定的串儿开头
4.string toLowerCase() —> 将字母转成小写
5.string toUpperCase() —> 将字母转成大写
6.string trim() —> 去掉字符串两端空格
示例:
public static void main(String[] args) {String s = "abcdefg"; // 1.boolean contains(string s) —> 判断老串儿中是否包含指定的串儿System.out.println(s.contains("def")); // 2.boolean endsWith(string s) —> 判断老串儿是否以指定的串儿结尾System.out.println(s.endsWith("fg")); // 3.boolean startsWith(string s) —> 判断老串儿是否以指定的串儿开头System.out.println(s.startsWith("abcd")); // 4.string toLowerCase() —> 将字母转成小写System.out.println(s.toLowerCase()); // 5.string toUpperCase() —> 将字母转成大写System.out.println(s.toLowerCase().toUpperCase()); // 6.string trim() —> 去掉字符串两端空格,去不掉中间空格s = " 一切都会好的 ";System.out.println(s.trim()); // 7.去掉所有空格 replace将空格进行替换System.out.println("一起都会好的 我一直相信".replace(" ","")); }
相关文章:

重学java 30.API 1.String字符串
于是,虚度的光阴换来了模糊 —— 24.5.8 一、String基础知识以及创建 1.String介绍 1.概述 String类代表字符串 2.特点 a.Java程序中的所有字符串字面值(如“abc”)都作为此类的实例(对象)实现 凡是带双引号的,都是String的对象 String s "abc&q…...

【区块链】共识算法简介
共识算法简介 区块链三要素: 去中心化共识算法智能合约 共识算法作为区块链三大核心技术之一,其重要性不言而喻。今天就来简单介绍共识算法的基本知识。 最简单的解释,共识算法就是要让所有节点达成共识,保证少数服从多数&#x…...

Qt---day2-信号与槽
1、思维导图 2、 拖拽式 源文件 #include "mywidget.h" #include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget) { ui->setupUi(this); //按钮2 this->btn2new QPushButton("按钮2",th…...

Python中设计注册登录代码
import hashlib import json import os import sys # user interface 用户是界面 UI """ 用户登录系统 1.注册 2.登陆 0.退出 """ # 读取users.bin def load(path): return json.load(open(path, "rt")) # 保存user.bin def save(dic…...

AI伦理和安全风险管理终极指南
人工智能(AI)正在迅速改变各个领域的软件开发和部署。驱动这一转变的两个关键群体为人工智能开发者和人工智能集成商。开发人员处于创建基础人工智能技术的最前沿,包括生成式人工智能(GenAI)模型、自然语言处理&#x…...

golang testing使用
testing包服务于自动化测试 基本测试 Table Drvien Test 基于表的测试通过表形式进行测试每种情况的输入和期望输出,从而测试程序的正确性 func TestFib(t *testing.T) {var fibTests []struct {in int // inputexpected int // expected result}{{1, 1}…...

在Excel中使用正则提取单元格内容
在办公自动化的浪潮中,Excel 作为数据处理的利器,一直在不断进化。最近,我注意到了不坑盒子Office插件一个非常实用的功能更新——bk_regex_string 公式。这个功能对于我们这些日常需要处理大量文本和数据的办公人员来说,无疑是一…...

SQL查询语句(二)逻辑运算关键字
上一篇文章中我们提到了条件查询除了一些简单的数学符号之外,还有一些用于条件判断的关键字,如逻辑判断 关键字AND,OR,NOT和范围查找关键字BETWEEN,IN等;下面我们来介绍一些这些关键字的用法以及他们所表达的含义。 目录 逻辑运算关键字 AND…...

矿山机械自动化中的激光雷达技术探索
在矿山机械自动化技术的快速发展中,激光雷达技术作为其关键组成部分,正发挥着越来越重要的作用。本文将深入探讨激光雷达在矿山机械自动化中的应用,以及其所面临的挑战与未来发展趋势。 一、激光雷达在矿山机械自动化中的应用 激光雷达技术…...

MOSFET场效应管栅极驱动电流的计算
MOSFET驱动 MOSFET场效应管是电压驱动器件,输入有电容,因此为可靠驱动MOSFET,栅极需要施加较大的驱动电流。 功率MOSFET开关模型 该模型显示了影响开关性能的最重要的寄生器件。 栅极所需驱动电流计算公式 一个很重要的参数是计算栅极驱…...

Python 爬虫:Spring Boot 反爬虫的成功案例
前言 在当今数字化时代,网络数据成为了信息获取和分析的重要来源之一。然而,随着网络数据的广泛应用,爬虫技术也逐渐成为了互联网行业的热门话题。爬虫技术的应用不仅可以帮助企业获取有价值的信息,还可以用于数据分析、市场研究…...

计算机毕业设计Python+Vue.js天气预测系统 中国气象质量采集与可视化 天气数据分析 天气可视化 天气大数据 天气爬虫 大数据毕业设计
摘要 随着科技技术的不断发展,人民物质生活质量不断提高,我们越来越关注身边的气象、空气等地理环境。对于普通居民我们会选择合适的气象进行出游,提高精神层面的生活质量;对于企业会关注气象变换状况,来定制相关的生产…...

【busybox记录】【shell指令】tr
目录 内容来源: 【GUN】【tr】指令介绍 【busybox】【tr】指令介绍 【linux】【tr】指令介绍 使用示例: 转换字符 - 默认 转换字符 - 不翻译指定字符数组 此指令目前接触少,用得少,把精力放到其他常用指令上 常用组合指令…...

Mac虚拟机软件哪个好用 mac虚拟机parallels desktop有什么用 Mac装虚拟机的利与弊 mac装虚拟机对电脑有损害吗
随着多系统使用需求的升温,虚拟机的使用也变得越来越普遍。虚拟机可以用于创建各种不同的系统,并按照要求设定所需的系统环境。另外,虚拟机在Mac电脑的跨系统使用以及测试软件系统兼容性等领域应用也越来越广泛。 一、Mac系统和虚拟机的区别 …...

Type-C转音频(USB2.0数据传输)+PD充电芯片乐得瑞LDR6500/LDR6023
LDR6500 USB-C DRP 接口 USB PD 通信芯片概述 Type-C转音频(USB2.0数据传输)PD充电芯片乐得瑞LDR6500LDR6500是乐得瑞科技针对USB Type-C标准中的Bridge设备而开发的USB-C DRP(Dual Role Port,双角色端口)接口USB PD(Power Deliv…...

【busybox记录】【shell指令】expand
目录 内容来源: 【GUN】【expand】指令介绍 【busybox】【expand】指令介绍 【linux】【expand】指令介绍 使用示例: 把制表符转化为空格 - 默认输出 把制表符转化为空格 - 修改制表符转空格的个数 把制表符转化为空格 - 修改制表符转空格的个数…...

软件测试—— 接口测试之通讯流程相关概念
通讯流程 1、协议 通讯规则 2、HTTP协议 协议的一种 3、接口规范文档 如何发请求的要求文档,获取什么响应内容的说明文档(相当于菜单)...

AT32 雅特力CAN详细使用说明配置细则
CAN 过滤器使用说明 CAN 过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上"过滤"一下,能通 过的报文是有效报文,收进相关联 FIFO(FIFO0 或 FIFO1),不能通过的…...

【机器学习】集成方法---Boosting之AdaBoost
一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型(也称为“基学习器”或“弱学习器”)的输出结果进行集成,以获得比单一模型更好的泛化性…...

AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...

鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式
本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式(Operating mode)又叫处理器模式(Processor mode),是 CPU 运行的重要参数,决定着处理器的工作方式,比如如何裁决特权级别和报告异…...

5月6(信息差)
🌍一次预测多个token,Meta新模型推理加速3倍,编程任务提高17% https://hub.baai.ac.cn/view/36857 🎄 LeetCode 周赛超越 80% 人类选手,推理性能超 Llama3-70B。 ✨ 我国量子计算机实现“四算合一” 实现通算、…...

Qt在任务栏图标和系统托盘图标上显示红点
在任务栏图标上显示红点 关键类:QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…...

springboot拦载器
1、拦载器 package com.Interceptor;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.security.auth.login.Log…...

知道创宇安全服务实习
自我介绍攻防演练讲一下,我讲到了内网利用,用到了frp/nps这种nps直接扫不会有被发现吗?cs搭建在vps,有做什么隐藏吗,(端口或者cdn之类的)域前置了解吗cs上传的木马免杀了吗问了linux怎么查看进程…...

SGP.22-V.3.1-安全1
有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题,欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot). 2.6.4.4 Command TLV MACing and Encryption 在提供的文件 "RSP Technical Specification Version 3.1 Final" 中&a…...

STM32单片机ADC功能详解
文章目录 1. ADC概述 2. ADC结构图 3. 引脚定义 4. 转换模式 5. 数据对齐 6. 转换时间 7. 硬件电路 8. STM32使用ADC单/多通道检测数据 1. ADC概述 功能:ADC是一个将模拟信号(如电压)转换为数字信号的设备。在微控制器中,…...

47.Redis学习笔记
小林coding -> 图解redis的学习笔记 文章目录 Rediswindwos安装docker安装redis启动redis使用RDM访问虚拟机中的redispython连接redis缓存穿透、击穿、雪崩基本数据类型高级数据类型高并发指标布隆过滤器分布式锁Redis 的有序集合底层为什么要用跳表,而不用平衡…...

数控六面钻适用场景-不止家具制造
在快节奏的现代生活中,家具作为我们生活的重要组成部分,其美观度和实用性日益受到人们的关注。而在这背后,一个不可或缺的“工匠”正默默地发挥着它的作用——那就是数控六面钻。 数控六面钻,顾名思义,是一种高度自动…...

【力扣】86. 分隔链表
86. 分隔链表 题目描述 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head […...