一个月学会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密码 对数据的读写是要验证密码的,因此卡片正式使用前,需要把卡片密码改成需要的密码,系统才可以识别 由于一次加密卡片数量比较大&#…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

