一个月学会Java 第7天 字符串与键盘输入

news2024/11/25 7:00:05

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类中还是有很多方法的,有很多实用的方法,比较常用的比如![请添加图片描述](https://i-blog.csdnimg.cn/direct/c439b9a3ec4c459cb713c7ac1579aa1c.png)

        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类的API
        System.out.println("\"123\".isEmpty()" + "123".isEmpty());
        System.out.println("\"\".isEmpty()" + "".isEmpty());
        System.out.println("======");
        //第三个equals就是相等的意思,这个是比对字符串用的,因为使用==比对的其实是hashCode
        System.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类型那就使用nextInt
        System.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是特殊的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《深入浅出LLM基础篇》(五):Propmt工程优化

&#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料&#xff0c;配有全面而有深度的专栏内容&#xff0c;包括不限于 前沿论文解读、…

【C++】AVL树(AVLTree)

目录 一、AVL树概念&#xff1a; 二、定义&#xff1a; 三、AVL树的插入&#xff1a; 四、AVL树的旋转&#xff1a; 1、左单旋&#xff1a; 2、右单旋&#xff1a; 3、右左双旋&#xff1a; 4、左右双旋&#xff1a; 五、AVL树的检验&#xff1a; 一、AVL树概念&#x…

重离子+数字化,肿瘤治疗的新路

大国之重器&#xff0c;当为大国之民生。 医用重离子加速器装置&#xff0c;被誉为肿瘤放疗领域的大国重器。在河西走廊东侧的甘肃省武威肿瘤医院(以下简称&#xff1a;武威肿瘤医院)&#xff0c;我国首台拥有自主知识产权的医用重离子加速器装置坐落此。自建成投入使用以来&a…

新手教学系列——爬虫异步并发注意事项

引言 爬虫是网络数据采集中不可或缺的工具,很多程序员在入门时会遇到这样的问题:为什么我的爬虫这么慢?尤其在面对大量数据时,单线程爬虫的速度可能让人捶胸顿足。随着爬虫规模的增大,异步并发成为了提高爬取效率的关键。然而,异步并发并不像表面看起来那么简单,如果没…

有哪些可靠的算力租赁平台推荐

作为一名炼丹师&#xff0c;在炼丹过程中使用过不少 GPU 算力租用平台&#xff0c;也有很多心得体会~为了让道友们少走弯路&#xff0c;我打算把近期在市场上用过的几家热门的 GPU 算力平台比较比较&#xff0c;以便其他炼丹师选择适合自己的算力平台。话不多说看&#xff01; …

Python简介与入门

如果你要用计算机做很多工作&#xff0c;最后你会发现有一些任务你更希望用自动化的方式进行处理。比如&#xff0c;你想要在大量的文本文件中执行查找/替换&#xff0c;或者以复杂的方式对大量的图片进行重命名和整理。也许你想要编写一个小型的自定义数据库、一个特殊的 GUI …

2025年人工智能行业的发展趋势预测以及中小企业的应对策略

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 ​ 进入2024年的第四季度&#xff0c;人工…

python数据分析与可视化工具介绍-numpy库

NumPy&#xff08;Numerical Python的简称&#xff09;&#xff0c;是科学计算基础的一个库&#xff0c;提供了大量关于科学计算的相关功能&#xff0c;例如&#xff0c;线性变换&#xff0c;数据统计&#xff0c;随机数生成等。其提供的最核心的类型为多维数组类型&#xff08…

Android Studio 打包混淆失效问题

项目场景&#xff1a; 通过 Python 脚本运行打包 Apk &#xff0c;实现动态配置各个版本的 Apk。 问题描述 通过 Python 脚本打包编译 Apk&#xff0c;开启混淆后&#xff0c;打包成功&#xff0c;反编译出来的 Apk 并没有被混淆。 原因分析&#xff1a; 首先确认打包混淆…

矩阵系统源码搭建,oem贴牌,技术指导

一、技术选型与整合 多种技术的融合 矩阵系统通常需要整合多种技术&#xff0c;包括前端技术、后端技术、数据库技术、服务器技术等。选择合适的技术栈并确保它们能够良好地协同工作是一个挑战。例如&#xff0c;前端可能使用 React 或 Vue.js&#xff0c;后端可能使用 Java Sp…

聚观早报 | 台积电9月份营收;联发科发布天玑9400

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 10月10日消息 台积电9月份营收 联发科发布天玑9400 vivo X200系列将全系标配原子岛 骁龙8 Gen4或改名“骁龙8至尊…

[ComfyUI]看惯AI味女神,回归现实,聊聊去AI胶皮味现实真人写真

随着人工智能技术的飞速发展&#xff0c;图像生成与反推技术已经取得了显著的进展。然而&#xff0c;有时候我们也会怀念那些真实、自然的人像照片。今天&#xff0c;我们为您带来了一篇关于[ComfyUI]如何拍摄去AI胶皮味现实真人写真的文章&#xff0c;帮助您回归现实&#xff…

Redis:分布式 - 哨兵

Redis&#xff1a;分布式 - 哨兵 概念哨兵 Docker 搭建哨兵分布式选举流程 概念 Redis 的主从复制模式下&#xff0c;一旦主节点由于故障不能提供服务&#xff0c;需要人工进行主从切换&#xff0c;同时大量的客户端需要被通知切换到新的主节点上&#xff0c;对于上了一定规模…

美发店管理升级:SpringBoot技术实现

3系统分析 3.1可行性分析 通过对本美发门店管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本美发门店管理系统采用SSM框架&#xff0c;JAVA作为开发语…

产业园区数字化转型:破解传统园区发展瓶颈

在当今数字化浪潮汹涌澎湃的时代&#xff0c;传统产业园区面临着诸多发展瓶颈&#xff0c;而产业园区数字化转型成为了突破这些困境的关键路径。 传统产业园区往往存在着管理效率低下、资源配置不合理、企业间协同困难以及创新能力不足等问题。这些问题就像一道道枷锁&#xf…

胃阴亏则百病生!阴虚火旺、胃病多发、灼痛?秋冬滋补季,用“仙草”养养胃~

中国有句俗话“十人九胃”&#xff0c;现代社会作息混乱、饮食无度&#xff0c;胃病的患病率也变得越来越高。 经常熬夜&#xff0c;饮食不规律&#xff0c;暴饮暴食&#xff0c;肠胃不适&#xff0c;面色差~ 喜食辛辣&#xff0c;总吃烧烤&#xff0c;烘烤、辛辣热性的食物&…

线下旅行社增长:单品牌半年新开500家门店,净利润增幅超307%

实体门店集体下行&#xff0c;旅行社缘何能越开越多 前言 线上流量井喷背景下&#xff0c;旅游业却“反其道而行”&#xff0c;重燃线下旅行社战火。 文化和旅游部市场管理司今年9月发布的《2024年第二季度全国旅行社统计调查报告》显示&#xff0c;截至2024年6月30日&#…

WPF中的常用控件

控件分类 在第一篇文章.Net Core和WPF介绍中的WPF的功能和特性部分根据功能性介绍了WPF的控件 名称。 在接下来的文章中&#xff0c;将会详细的介绍各个控件的概念及使用。 主要包括&#xff1a; 内容控件&#xff1a;Label、Button、CheckBox、ToggleButton、RadioButton、…

Large AI Model Empowered Multimodal Semantic Communications——基于大模型的多模态语义通信框架

1. 背景 本文讨论了大规模AI模型在多模态语义通信&#xff08;SC&#xff09;系统中的应用&#xff0c;处理不同类型的数据&#xff08;文本、音频、图像、视频&#xff09;以实现低延迟、高质量的语义层次通信。提出了一个基于大模型的多模态SC&#xff08;LAM-MSC&#xff09…

心理学基础

一&#xff0c;三观 三观包括世界观、人生观、价值观。 1&#xff0c;世界观 世界观‌是人们对整个世界的总的看法和根本观点。可以划分为两种根本对立的世界观类型&#xff0c;即唯心主义世界观和唯物主义世界观。 2&#xff0c;人生观 人生观是人们在实践中形成的对于人…