一个月学会Java 第7天 字符串与键盘输入
Day7 字符串与键盘输入
字符串作为所有程序都很重要的东西,这个东西必须好好的学习,在Java中String会比较好学习,比起C和C++里面会更加的简单,
在Java之中也是很好理解的,因为底层已经封装好了char数组,也就是字符串
第一章 字符串
字符串的声明非常的简单,只需要使用使用String这个类作为数据类型即可, String name = "XingZai"
,String这个类是特殊的类,可以直接写值而不需要使用new关键字,这是在jdk1.2版本开始就优化了这个,可以直接写了,但是还是保留着的,而且是不一样的,待会就稍微浅讲一下。
还记得我之前所说的,使用new就相当于是创建对象,然后这个对象直接丢入打印里面就是直接调用这个对象的 toString()
这个方法,但是我们来看方法名,是不是 to String,转换到String类型,但是我们的String本来就是String是吧,所以String的toString()
其实就是打印自身,直接上代码
public class Hello {public static void main(String[] args) {String name = "123123";System.out.println(name);}
}
感觉这个没有什么好说的,还是非常简单的,声明是这样,然后就是我们之前讲过的拼接字符串,使用 +
号,在数字和数字之间是计算,但是在字符串和其他面前就是拼接了,可以拼接的又但不限于,数字,布尔值,和对象,因为如果拼接对象的话会自动调用这个对象的toString()
方法也就是那个 类@hashCode
public class Hello {public static void main(String[] args) {String s = "123123" + true;System.out.println("s: " + s);String s2 = "Hello: " + new Hello();System.out.println(s2);}
}
接下来我们来自定义一下这个toString方法,比如现在我们使用的是Hello类的对象,那我们直接写就行了
public class Hello {public static void main(String[] args) {System.out.println(new Hello());}//toString方法是一个返回String类型的方法,我们只需要在返回值上加上就行public String toString() {return "Hello类" + "123";}
}
欧克,接下来我们来讲讲,jdk1.1及之前的使用new关键字创建String对象的方法,和我们现在直接写String的方法有什么区别。这个时候我们还需要知道一个方法,这个是所有的类都有的这么一个方法除了toString()
之外都有的这么一个方法,那就是hashCode()
,之前我也说过了在Java中地址的显示都是通过hashCode的方式来显示了,所以我们的这个 hashCode()
这个方法就是获取他的hashCode
public class Hello {public static void main(String[] args) {//传统创建对象的方式来创建String类的对象String s = new String("123");String s1 = "123";System.out.println("s: " + s);System.out.println("s1: " + s1);System.out.println("s: " + s.hashCode());System.out.println("s1: " + s1.hashCode());boolean b = s == s1;System.out.println("s == s1: " + b);if (!b)System.out.println("哈希值是不是一样,但是让他判断竟然是false");Hello hello = new Hello();Hello hello1 = hello;System.out.println("hello: " + hello);System.out.println("hello1: " + hello1);System.out.println(hello1 == hello);}
}
是不是感到了深深的疑惑,同样的hashCode,Hello类的对象就是相等,但是同样hashCode的字符串竟然不是相等,你们先别急,我来慢慢道来,这个时候就需要画个图了,请出灵魂画手,s1这个对象是怎么指的
(了解Java内存的先别喷,现在还不分开来说,无论常量池,堆还是方法区等等现在都统一叫做内存空间)
我们再来看看,s这个对象是怎么指的
所以比对才是不一样的,hello和hello1一样的是因为他们都是指向原hello这个对象,我们的s打印的其实可以理解为toString的hashCode,还是追去
"123"去取hashCode了,但是实际比对比的还是 "123"和s在内存中的映射,咱们直接来看源码
拿的都是底层的字符数组,来计算的,所以hashCode才会一样,实际上就是我画的图的那样的指向
这个就是字符串的难题了,剩下的就是很简单的调用一下String这个类的方法,因为直接写的字符串就是String这个类的对象,所以直接使用
.方法()
的操作就行
public class Hello {public static void main(String[] args) {/*在String类中还是有很多方法的,有很多实用的方法,比较常用的比如length,isEmpty,equals,toCharArray,split,indexOf,replace,toUpperCase,toLowerCase,trim*///第一个length,顾名思义,就是长度String s1 = "123456";System.out.println("s1.length(): " + s1.length());System.out.println("======");//第二个isEmpty,顾名思义,是空,如果真的空就会返回true,如果不是那就返回false//这个\是转义字符,待会会讲,现在在讲String类的APISystem.out.println("\"123\".isEmpty()" + "123".isEmpty());System.out.println("\"\".isEmpty()" + "".isEmpty());System.out.println("======");//第三个equals就是相等的意思,这个是比对字符串用的,因为使用==比对的其实是hashCodeSystem.out.println("equals()" + new String("123").equals("123"));System.out.println("======");//第四个toCharArray就是转换char数组String s2 = "123456";char[] charArray = s2.toCharArray();for (char c : charArray) {System.out.print(c + " ");}System.out.println();System.out.println("======");//第五个split,的意思是切割,根据给的参数切割字符串String s3 = "123 456 789";String[] strings = s3.split(" ");for (String str : strings) {System.out.println(str);}System.out.println("======");//第六个indexOf 下标String s4 = "123456";int i = s4.indexOf('3');System.out.println("index: " + i);System.out.println("======");//第七个replace 重新放置String s5 = "123456";String replace = s5.replace('1', '4');System.out.println("replace: " + replace);System.out.println("======");//第八个toUpperCase 大写转换System.out.println("abc".toUpperCase());System.out.println("======");//第九个toLowerCase 小写转换System.out.println("QWE".toLowerCase());System.out.println("======");//第十个trim 去除前后空格System.out.println(" 123123 456456 ".trim());}
}
我话先说在前头,这个东西不用死记,用到就记住了,前提稍微学好一点英语,以后上ide之后直接翻结构来查看用方法。
接下来就是我上个代码里面要讲的一个知识点,转义符,在Java中的转义符是有很多的,比如有 \n,\r,\',\",\\,\t
等等,有很多,我就举这几个例子,还有更多的可以去查看ascii码的表里面其实是有的
public class Hello {public static void main(String[] args) {//\n 换行,这个很熟悉,因为在println的末尾会自动添上这么一个,当然也可以手动添加System.out.println("123\n123456");System.out.println("======");//\r 这个是做回车作用的,单个时候就是回到这一行的开头System.out.println("123456\r456");System.out.println("以上是发生了替换");System.out.println("======");//\t 制表符的打印System.out.println("123\t123");System.out.println("======");//\\,\',\" 这个就是转义了,就是直接打印//因为默认的双引号就是字符的开头和结尾,你想要在字符串里面有双引号就需要转义//然后反斜杠本来就是转移符,所以需要转义才能打印出来//还有一个就是单引号,在字符串里面其实可以直接使用,但是在其他语言中不一样//比如python,他无论单引号还是双引号都是字符串,所以这个就需要用到转义//但是在java中如果是你字符串那你就不需要转义了,因为单引号没有阻碍任何东西System.out.println("\\,\',\"");}
}
字符串还有一个内容,那就是可以通过字符串转换其他类型,这个会在之后的常用类里面讲到,不少方法是放在包装类里的,之后学会了包装类之后,那就是真的完全拿捏了字符串了
字符串暂时就先讲这么多内容了,只要你都会了就说明你对字符串了如指掌了,那对 System.out.println()
用起来会更加的得心应手
第二章 键盘输入
我们进行开发自然少不了要输入,首先我们想要输入需要引入一个东西,在我们说数组的时候,其实已经讲解过什么是引入,那就是import,在我们使用这个输入类的时候,我们就需要引入一下这个类,就和数组工具Arrays一样
首先我们先说这个类在哪里,这个类在java.util.Scanner,没错这个类就叫做Scanner,然后我们引入了这个类就可以创建这个类的对象并进行使用了
import java.util.Scanner;public class Hello {public static void main(String[] args) {//我们先来创建对象,这次我们需要在括号里添加东西了Scanner scanner = new Scanner(System.in);//scanner内有多种方法,我们根据需要选择对应的方法,比如我们要输入int类型那就使用nextIntSystem.out.println("请输入:");int i = scanner.nextInt();System.out.println(i);}
}
我们使用了之后,会出现光标卡住,这里其实就是在等待我们输入了,然后我们直接输入数字,因为我们使用的是int类型的键入
这样就完成了我们的输入,那如果你不想输入数字的话,输入了别的,然后代码里面写的是nextInt的话,那就会报错
这样就会报错,因为我们的nextInt只能接受int类型的输入,输入其他的就会报这样的错误,说是 输入类型适配错误异常,所以我们只需要调整代码或者是外部的输入就不会报错了
我们可以使用的方法有但不限于这张图里面显示的方法
然后我们可以依次类推,是不是看到了除nextInt之外的nextDouble,nextFloat等等,其实都是获取对应类型的值的,我们还有特殊的两个,一个是next()
,一个是nextLine,他们分别为空格结尾和回车作为结尾,然后返回的都是字符串类型
import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入:");String next = scanner.next();System.out.println(next);}
}
就和我说的一样,从空格开始就隔断了
import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入:");String next = scanner.nextLine();System.out.println(next);}
}
使用Line的时候就是在一行结束之后也就是碰到回车了之后才隔断
import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入:");for (int i = 0; i < 2; i++) {String next = scanner.next();System.out.println(next);}}
}
我们明显可以看到,空格自动隔开,如果后面还有获取,或者循环了一下这个获取,还是能获取到的,所以我们可以使用这种方式进行数组的输入啊等等,因为int,double,float等等都是和next是一样的,只有nextLine是特殊的。
相关文章:

一个月学会Java 第7天 字符串与键盘输入
Day7 字符串与键盘输入 字符串作为所有程序都很重要的东西,这个东西必须好好的学习,在Java中String会比较好学习,比起C和C里面会更加的简单, 在Java之中也是很好理解的,因为底层已经封装好了char数组,也就是…...

Java后端面试题(day16)
目录 java常见的引用类型java中深拷贝和浅拷贝如何设计一个秒杀系统?谈一下对高并发的理解,平时怎么处理高并发问题?Comparable和Comparator区别?解决hash冲突有哪些方法?Synchronized锁的升级过程 java常见的引用类型 java的引用类型一般分…...

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 用户体验成为了检验产品成功与否的关键因素。而动画效果,作为提升用户体验的重要手段,在网页和应用开发中扮演着举足轻重的角色…...

k8s之ingress-nginx-controller安装
作者:程序那点事儿 日期:2024/01/30 01:25 要在master节点上安装 helm repo add ingress-nginx Welcome - Ingress-Nginx Controller helm search repo ingress-nginx helm pull ingress-nginx/ingress-nginx --version 4.4.2 mv ingress-nginx-4.4.…...
力扣SQL仅数据库(1098~1132)
1098 小众书籍 需求 编写解决方案,筛选出过去一年中订单总量 少于 10 本 的 书籍,并且 不考虑 上架距今销售 不满一个月 的书籍 。假设今天是 2019-06-23 。 返回结果表 无顺序要求 。 数据准备 Create table If Not Exists Books (book_id int, nam…...

优惠点餐api接口对接的具体步骤是什么?
优惠点餐API接口对接的具体步骤通常包括以下几个阶段: 需求分析:明确对接的目标和需求,例如实现在线点餐、订单管理、支付集成等 。选择API服务提供商:根据业务需求选择合适的点餐API服务提供商 。注册和获取API密钥:…...

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【297-313】
文章目录 297. super基本语法297.1 基本介绍297.2 基本语法 298. super使用细节1299. super使用细节2300. super使用细节3301. 方法重写介绍302. 方法重写细节303. 重写课堂练习1304. 重写课堂练习2输出结果: 姓名:田所浩二 年龄:24305. 养宠物引出多态3…...

快递批量查询物流追踪只揽收无物流信息的单号
在电子商务和物流领域,快递单号的追踪是确保货物顺利送达的关键环节。然而,在实际操作中,经常会遇到一些只显示揽收信息而没有后续物流更新的单号,这给商家和买家都带来了不小的困扰。本文将介绍如何通过快递批量查询物流的方法&a…...

【动态网站资源保存下载】
文章目录 概要解决思路技术细节小结 概要 我们在网上浏览网站时,经常有这样的需求:将浏览的网页保存下来,即使无网的情况下也可以继续浏览。比如一些教育类网站的PPT,内容为HTML格式的,无法作为PPT格式下载下来&#…...

Selenium自动化测试中如何处理数据驱动?
在自动化测试中,数据驱动(Data-Driven Testing)是指通过外部数据源(如Excel、CSV、数据库等)来控制测试用例的执行,而不是直接在代码中硬编码数据。这种方式可以提高测试的灵活性和可维护性,使得…...
淘宝API接口系列有哪些内容?
淘宝API(Application Programming Interface)接口系列是一套允许开发者与淘宝平台进行数据交互的接口集合,涵盖了商品信息、订单信息、物流信息、用户信息以及营销等多个方面的数据接口。以下是对淘宝API接口系列内容的详细归纳: …...

华为OD机试 - 冠亚军排名(Java 2024 E卷 100分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…...

VmWare中安装CenterOs(内网服务器)
VmWare中安装CenterOs(内网服务器) 文章目录 VmWare中安装CenterOs(内网服务器)[toc] 一 、CentOS 7的下载与安装1、下载2、安装(1)前期准备(2)正式安装 开始等待!!! 二、软件仓库更换1、root用…...

JS 数组去重 — 各类场景适合方法大全
JS 数组去重 — 各类场景适合方法大全 本文介绍各种场景 JS 去重 方法使用 性能最好、用的最多、场景大全 文章目录 JS 数组去重 — 各类场景适合方法大全 一、基础篇:简单直观的去重方法1. 使用Set数据结构2. 利用filter和indexOf方法3. reduce方法的应用 二、进阶…...

【Java 问题】集合——List
List 1.说说有哪些常见集合?2.ArrayList和LinkedList有什么区别?3.ArrayList的扩容机制了解吗?4.ArrayList怎么序列化的知道吗? 为什么用transient修饰数组?5.快速失败(fail-fast)和安全失败(fail-safe)了解吗…...
xss 跨站脚本攻击
XSS 的全称是 Cross-Site Scripting(跨站脚本攻击)。是一种常见的web安全漏洞。 1. XSS 的定义 XSS 是一种注入类型的攻击,攻击者将恶意脚本注入到受信任的网站中。当其他用户访问该网站时,这些脚本会在用户的浏览器中执行。 2…...

5.toString()、构造方法、垃圾回收、静态变量与静态方法、单例设计模式、内部类
文章目录 一、toString()1. 优缺点2. 使用方法举例① Dos类里更省事的方法 ② Application里 二、构造方法1. 导入2. 什么是构造方法3. 怎么写构造方法① 无参的构造方法(无参构造器)② 有参的构造方法(有参构造器)③ 注意 4. 构造方法的重载 三、再探this1. 给成员变量用2. 给…...

Fiddler配合wireshark解密ssl
环境: win11(wireshark)--虚拟机win7(Fiddler)---虚拟机win7(HTTPS站点) 软件安装问题: 需要.net环境,NDP461-KB3102436-x86-x64-AllOS-ENU.exe。 安装fiddler后安装下…...

【UI】将 naive ui 的 message 封装进axios 中,关于naiveui的message相关的用法
文章目录 前言在setup外进行使用直接包裹使用vue 单文件中使用 参考文章: 关于naiveui的message相关的用法 前言 最近新建了一个vite vu3 的项目,完全是从0 到1 ,封装到request 的时候 想对axios 请求做一个全局的处理,但发现…...

IC卡批量加密快速写入
我们常用的非接触式IC卡,简称M1卡,他有16个扇区,每个扇区有A密码和B密码 对数据的读写是要验证密码的,因此卡片正式使用前,需要把卡片密码改成需要的密码,系统才可以识别 由于一次加密卡片数量比较大&#…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...