字符串(java)

字符串的特点:

1.String是java定义好的一个类,定义在java.lang包里面,所以使用的时候是不需要进行导包的

2.java程序中的所有字符串文字,都被实为此类的对象。也就是说当我们就算是进行赋值,这个也会创造两个字符串

3.字符串是不可变的,它的值在创建后不能被更改

创建String对象的两种方式:

  1. 直接赋值  String name = “关岁安”;
  2. 可以使用new一个String来创建
     

 创建字符串的几种方式

public class Role {public static void main(String[] args) {//1.直接赋值String s1 = "abc";System.out.println(s1);//2.使用new一个字符串对象//空参构造;可以获取一个空白的字符串对象String s2 = new String();System.out.println("@"+s2+"!");//3.有参构造,根据传递的字符串内容再创建以一个新的字符串String s3 = new String("abc");System.out.println(s3);//4.传递一个字符数组,根据字符串数组的内容再创建一个新的字符串对象//修改字符串的内容:abc = {'a','b','c'}-->{'q','b','c'}可以通过字符行数组进行改变char[] chs = {'a','b','c'};String s4 = new String(chs);System.out.println(s4);//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象//引用场景:以后在网络种传输的数据其实都是字节信息byte[] bytes = {100,23,33};//这个是一个ASILL值区查找相应的字符String s5 = new String(bytes);System.out.println(s5);}
}

这几种创建字符串的内存方式;

当使用双引号直接赋值的时候,系统会检查该字符串在串池中是否存在

不存在:创建新的

存在:复用

使用字符数组进行创建字符串

 

 

s1和s2是创建两个空间

java的常见方法(比较)

 

==所以这个是什么意思?

如果是基本数据类型比较的是数值

如果是引用数据了类型比较的是地址值

 

如果我们想要比较字符床就需要使用两个函数第一个是

Boolean equals方法(要比较的字符串—这个是不能忽略大小写

Boolean equalsignoreCase方法(要比较的字符串—这个是可以忽略大小写)

 

public class Role {public static void main(String[] args) {//1.创建两个字符串对象String s1 = new String("abc");String s2 = new String("abc");System.out.println(s1 == s2);}
}

由于最后的地址不一样的

所以最后的答案是:false

boolean result = s1.equals(s2);
System.out.println(result);

如果是比较两个字符串里面的内容,这个时候返回的值是true

String s3 = new String("Abc");
boolean result_1 = s1.equalsIgnoreCase(s3);
System.out.println(result_1);

那么最后出来的是true

import java.util.Scanner;//这个相当于一个iostream的头文件public class Role {public static void main(String[] args) {//如果我想要通过键盘进行字符串比较//1.创建一个输入的对象名(栈区存放的是一个地址)Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");//2.原来输入一个字符串是这样的String s1 = sc.next();String s2 = "abc";//3.使用==比较,这两者能一样吗?System.out.println(s1 == s2);}
}

答案很显然是false是因为这个我们输入的这个是通过Scanner sc = new Scanner(System.in)

New出来的一个新的地址,所以肯定会不一样最好使用之前介绍的两个函数进行比较

案例:用户登录

需求:已知正确的用户名和密码,请用程序实现模拟用户登录

总共给三次机会,登录之后,给出相应的提示

小提示:自动生成左边ctrl + alt + v

使用ctrl + alt + t  使我们所写的代码在一个while if for等语句中

这个是一个判定用户密码输入的小程序

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {//1.创建正确的用户名和密码String RightUserName = "关岁安";String RightUserWord = "2829649106";Scanner sc = new Scanner(System.in);for (int i =1;i<=3;i++) {System.out.println("请输入用户名");String name = sc.next();System.out.println("请输入密码");String word = sc.next();//3.判断用户名和我们输入的密码是否一致if(name.equals(RightUserName)&&word.equals(RightUserWord)){System.out.println("输入密码正确");break;}else{if(i == 3){System.out.println("账号已锁定" + name + "请联系我解决");}else{System.out.println("输入的密码或者用户名不存在,你还剩下"+(3-i)+"次机会");}}}}
}

遍历字符串:

需求:键盘输入一个字符串,使用程序实现在控制台遍历该字符串

public char charAt(int index);

public int length();返回此字符串的长度

数组长度:数组名.lenght;

字符串长度:字符串对象.lengh

小技巧:当我们在进行输入字符串的时候,可以先写左边的输入: sc.next()  然后按着ctrl + shift + v 就会自动生成左边 当我们的这个项目体量增加后有可能会忘记这个变量的名字所以这个可以有效帮助我们进行书写

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {Scanner sc = new Scanner((System.in));System.out.println("请输入一个字符串");//1.进行输入字符串String str = sc.next();//2.遍历字符串for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);System.out.println(c);}}
}

在这里函数charAt(i) 相当于是一个数组下标 其实把这个看成一个数组下表i就行

统计字符串的大小写,数字的一个小程序

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {//1.键盘录入一个字符串Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");String str = sc.next();//2.统计...计数器的思想int bigcount = 0;int smallcount = 0;int num = 0;for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (c >= 'a' && c <= 'z') {smallcount++;} else if (c >= 'A' && c <= 'Z') {bigcount++;} else if (c >= '0' && c <= '9') {num++;}}System.out.println("小写" + smallcount);System.out.println("大写" + bigcount);System.out.println("数字" + num);}
}

这个其实就是和c语言的差不多 但是我们需要知道其中的具体操作

拼接字符串:

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

 

最后的代码呈现:

需要注意的是这个[ ]和空格和逗号的问题,我们在遍历到最后一个时候就不需要再加逗号和空格。

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {int[] a = {1, 2, 3};String str = arrToString(a);System.out.println(str);}public static String arrToString(int[] arr) {if (arr == null) {return "";}if (arr.length == 0) {return "[]";}String result = "[";for (int i = 0; i < arr.length; i++) {if (arr.length - 1 == i) {result = result + arr[i] + "]";} else {result = result + arr[i] + ", ";}}return result;}
}

再来一个训练:字符串的反转

小技巧:当我们写str.length的时候再加上.fori或者.forr  其中fori是从0开始遍历,而forr是从最后一个开始,到下标为0结束。

我犯下的错误:1.字符串不能进行自加行为  2.我们在使用函数进行调用时,是不能像c语言直接使用sout(加函数)  只能使用一个变量进行承接,然后通过输出变量进行输出字符串。

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {String str =  reverser("abc");System.out.println(str);}public static String reverser(String str){String ans = "";for(int i = str.length() - 1;i>=0 ;i--){char c = str.charAt(i);ans = ans + c;}return ans;}
}

 

 

小程序:金额转化

我犯下的错误:1.在while循环中我将int型变量放在了while循环的小括号中,在java中对于类型的要求时十分严格的,不能将整型的变量放这个小括号。

所以里面只能是true或者false
在后面我还搞错了一个东西:String类型的字符串中常常会赋初值”” 这个是不会占用String里面的下标的,只有赋” ”(里面含一个空格才能行)

  1. 首先我需要明白一件事,String[]是一个字符型数组,每个下标里面存放的是一个字符串。而对于一个String类型的字符串来说我们想要访问它其中的元素只能是通过str.charAt(i),来访问相应下标的元素。

关于这一题的相关代码:

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int num;//1.输入数字并且判断这个数字是否合法while (true) {System.out.println("请输入一个数字");num = sc.nextInt();if (num <= 0 || num >= 9999999) {System.out.println("数字不符合常规请重新输入");} else {break;}}String str = "";//2.将每一位数字都输入到方法中while (true) {int go = num % 10;String bignum = ToChangeNum(go);str = bignum + str;num /= 10;if (num == 0) break;}//补零int count = 7 - str.length();for (int i = 0; i < count; i++) {str = "零" + str;}System.out.println(str);String result = "";String[] arr = {"佰", "拾","万","仟","佰","拾","元"};for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);result = result + c + arr[i];}System.out.println(result);}public static String ToChangeNum(int num) {String[] change = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};return change[num];}
}

substring函数的使用方法:

String substring(int beginindex,int endindex)截取函数

注意点:包头不包尾,包做补包右

               只有返回值才是截取的最小串(对原来的字符串没有影响)

重载的方式:
String substring(int beginindex)从beginindex直接截取到末尾

我犯下的错误:String类型赋初值的时候我们不需要加上{}这样反而会错,应该直接加上双引号。

实体样例我们把密码中间那一步使用*代替

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {String numberPhone = "15570936136";String start = numberPhone.substring(0,3);String end = numberPhone.substring(7);String result = start + "****" + end;System.out.println(result);}
}

新学一个方法替换:str.replace(target:”字符串中的字符”,replacemaent:”***”);

后面这个可以和原来的字符串长度不一样。

我犯下的错误:这个其实和上面那截取是一样的,都容易犯忘记冲定义一个字符串来获取新字符串,注意截取和替换操作都无法对原来的字符串造成改变

import java.util.Scanner;public class StringDemo1 {public static void main(String[] args) {String str = "你可真牛,tmd";String ss = str.replace("tmd","******");System.out.println(ss);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第173期】基于matlab的RS编码的2FSK通信系统误码率仿真,通过AWGN信道输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 通信系统的基本框架 在现代通信系统中&#xff0c;数据的传输通常涉及四个基本步骤&#xff1a;源编码、信道编码、调制和传输。源编码主要负责压缩数据&#xff0c;减少传输的数据量。信道编码则通过添加冗余信息来提高传输…

【Laravel】06 数据库迁移工具migration

【Laravel】06 数据库迁移工具migration 1.migration文件目录2. 举例 1.migration文件目录 2. 举例 (base) ➜ example-app php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_crea…

博客页面---前端

目录 主页 HTML CSS 文章详细页面 HTML CSS 登录页面 HTML CSS 文章编辑页 HTML CSS 这只是前端的页面组成&#xff0c;还没有接入后端&#xff0c;并不是完全体 主页 HTML <!DOCTYPE html> <!-- <html lang"en"> --> <head>&…

在 C#和ASP.NET Core中创建 gRPC 客户端和服务器

关于gRPC和Google protobuf gRPC 是一种可以跨语言运行的现代高性能远程过程调用 (RPC) 框架。gRPC 实际上已经成为 RPC 框架的行业标准&#xff0c;Google 内外的组织都在使用它来从微服务到计算的“最后一英里”&#xff08;移动、网络和物联网&#xff09;的强大用例。 gRP…

Multi-task Lung Nodule Detection in Chest Radiographs with a Dual Head Network

全局头增强真的有用吗&#xff1f; 辅助信息 作者未提供代码

如何区分相对路径 与 绝对路径?

在网页中有很多需要使用我们URL路径的场景&#xff0c;包括a标签的href、link标签的href、script标签的src、imag标签的src、form中的action、ajax请求的url等等等等。它们都可以使用相对路径和绝对路径来引入文件&#xff0c;那么&#xff0c;我们如何区分相对路径与绝对路径呢…

Unix中的进程和线程-2

1.进程对环境变量的操作 在Linux中&#xff0c;你可以使用以下几个函数来操作环境变量&#xff1a; getenv: 获取环境变量值。setenv: 设置或修改环境变量值。unsetenv: 删除环境变量 getenv: 参数&#xff1a;接受一个字符串作为参数&#xff0c;表示要获取的环境变量的名称。…

【刷题】数据结构——树状数组

一、简介 树状数组用于两种操作&#xff1a; 快速求前缀和 O ( l o g n ) O(logn) O(logn)修改某一个数 O ( l o g n ) O(logn) O(logn) 这两个操作也可以用其他方法结构完成&#xff1a; 用一个数组存每个数&#xff1a;操作1. O ( n ) O(n) O(n)&#xff0c;遍历前n个数求…

Kubernetes(k8s)架构原理

比如在服务器上部署一个博客应用服务,但是太过受欢迎,访问量太大,应用服务经常会挂,使用自动重启工具,并且将应用服务部署在了好几个服务器上,总算抗住了。后来又上线了商城应用服务和语言应用服务,随着应用服务变多,需求也千奇百怪,有的应用服务不希望被外网访问,有…

[Flutter]打包IPA

1.直接使用Xcode运行iOS工程 不用flutter构建&#xff0c;在Xcode中是可以独立进行构建运行和打包发布的。 1).运行项目 先将flutter的build清理 $ flutter clean $ flutter pub get 然后立即用XCode打开iOS工程运行 运行会报错&#xff1a; error: The sandbox is not …

壁纸小程序Vue3(首页布局)

1.创建一个公共目录common来存放css和images App.vue中引用 <style lang"scss"> /*每个页面公共css */ import common/style/common-style.scss; </style> 2.渲染轮播图 <template><view class"homeLayout"><vi…

Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置

文章目录 前言相关地址环境配置初始化环境配置文件夹结构代码结构代码运行 资源文件导入像素风格窗口环境设置背景设置,Tileap使用自动TileMap 人物场景动画节点添加站立节点添加移动动画添加 通过依赖注入获取Godot的全局属性项目声明 当前项目逻辑讲解角色下降添加代码位置问…

【51单片机入门记录】IIC总线协议 EEPROM存储器AT24C02概述

一、IIC总线协议概述 &#xff08;1&#xff09;IIC&#xff08;Inter-IntegratedCircuit&#xff09;总线 是一种由PHILIPS公司开发的两线式串行总线&#xff0c;用于连接微控制器以及其外围设备。IIC也被成为I2C/IC&#xff0c;其实两者是完全相同的&#xff0c;只是名词不…

Linux(CentOS7)配置系统服务以及开机自启动

目录 前言 两种方式 /etc/systemd/system/ 进入 /etc/systemd/system/ 文件夹 创建 nginx.service 文件 重新加载 systemd 配置文件 ​编辑 配置开机自启 /etc/init.d/ 进入 /etc/init.d/ 文件夹 创建 mysql 文件 编写脚本内容 添加/删除系统服务 配置开机自启 …

精通Go语言文件上传:深入探讨r.FormFile函数的应用与优化

1. 介绍 1.1 概述 在 Web 开发中&#xff0c;文件上传是一项常见的功能需求&#xff0c;用于允许用户向服务器提交文件&#xff0c;如图像、文档、视频等。Go 语言作为一门强大的服务器端编程语言&#xff0c;提供了方便且高效的方式来处理文件上传操作。其中&#xff0c;r.F…

9.动态规划——2.最大序列和

例题——最大序列和 找状态 思路一&#xff08;&#xff09; 定义一个状态 d p [ i ] dp[i] dp[i]&#xff0c;计为前i个数构成子序列和的最大值 此法状态转移比较困难&#xff0c;即若 d p [ i ] dp[i] dp[i]与 d p [ i − 1 ] dp[i-1] dp[i−1]没有明确的关系&#xff0c;有…

Ribbon有哪些负载均衡策略

负载均衡类都实现了IRule接口。 RandomRule&#xff1a;随机的选用一个实例 RoundRobinRule&#xff1a;轮询的使用实例 RetryRule&#xff1a;在轮询的基础上加了一个错误重试机制&#xff0c;在deadline时间内会不断的重试 WeightResponeTimeRule&#xff1a;根据权重去做…

【计算机网络】四层负载均衡和七层负载均衡

前言 1、分层方式 首先我们知道&#xff0c;在计算机网络中&#xff0c;常用的协议分层方式&#xff1a;OSI和TCP/IP&#xff0c;以及实际生产中使用的协议划分方式。 在OSI中&#xff0c;各层的职责如下&#xff1a; 应用层&#xff1a;对软件提供接口以使程序能使用网络服…

深入探索位图技术:原理及应用

文章目录 一、引言二、位图&#xff08;Bitset&#xff09;基础知识1、位图的概念2、位图的表示3、位图操作 三、位图的应用场景1、数据查找与存储2、数据去重与排序 四、位图的实现 一、引言 位图&#xff0c;以其高效、简洁的特性在数据处理、存储和检索等多个领域发挥着举足…

Nest安装及使用~

前提条件 请确保您的操作系统上安装了 Node.js&#xff08;版本 > 16&#xff09; &#x1f4da;要查看指南&#xff0c;请访问 https://docs.nestjs.com/ &#x1f4da;要查看中文 指南&#xff0c; 请访问 https://docs.nestjs.cn/ $ node -v v16.18.1 $ npm -v 7.x.x安…