Java基础-字符串

Java基础-字符串

  • String
    • String构造方法
      • 代码实现
      • 内存分析
    • String的常用方法
      • 比较
      • 练习 - 遍历字符串 ( charAt(), length() )
      • 练习 - 字符串拼接
      • 练习 - 手机号屏蔽 ( substring() )
      • 练习 - 敏感词替换 ( replace() )
  • StringBuilder
    • 概述
    • 基本操作
  • StringJoiner
    • 概述
    • 基本操作
  • 字符串原理
  • 综合练习
    • 阿拉伯数字转罗马数字
    • 调整字符串
  • 来源
  • Gitee地址

String

String构造方法

代码实现

public class StringDemo01 {public static void main(String[] args) {// 1. 使用直接赋值的方式获取一个字符串对象String s1 = "abc";System.out.println(s1); // abc// 2. 使用new的方式获取一个字符串对象// 空参构造: 可以获取一个空白的字符串对象String s2 = new String();System.out.println("@"+s2+"!"); // @!// 没啥用: 传递一个字符串, 根据传递的字符串内容再创建一个新的字符串对象String s3 = new String("abc");System.out.println(s3); // abc// 传递一个字符数组, 根据字符数组的内容再创建一个新的字符串对象char[] chs = {'a', 'b', 'c'};String s4 = new String(chs);System.out.println(s4); // abc// 需求: 修改字符串内容, abc->Qbc// abc -> {'a', 'b', 'c'} -> {'Q', 'b', 'c'} -> "Qbc"// 传递一个字节数组, 根据字节数组的内容再创建一个新的字符串对象// 应用场景: 再网络当中传输的数据其实都是字节信息// 一般要把字节信息进行转换, 转成字符串, 此时就要用到这个构造了byte[] bytes = {97, 98, 99};String s5 = new String(bytes);System.out.println(s5); // abc}
}

内存分析

当使用双引号直接赋值时, 系统会检查该字符串在串池(StringTable, jdk7之后在堆内存中)中是否存在

  • 不存在: 创建新的
  • 存在: 复用

String的常用方法

比较

Demo02

public class StringDemo02 {public static void main(String[] args) {String s1 = new String("abc");String s2 = "abc";String s3 = "Abc";// 1. == 比较// 基本数据类型: 比的是数据值// 引用数据类型: 比的是地址值System.out.println(s1 == s2); // false// 2. 比较字符串对象的内容是否相等boolean res1 = s1.equals(s2);System.out.println(res1); // true// 3. 比较字符串对象的内容是否相等, 忽略大小写boolean res2 = s1.equalsIgnoreCase(s3);System.out.println(res2); // true}
}

Demo03

import java.util.Scanner;public class StringDemo03 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str1 = sc.next(); // 本质是new String(...);String str2 = "abc";System.out.println(str1 == str2); // false}
}

练习 - 遍历字符串 ( charAt(), length() )

  • char charAt(int index): 根据索引返回字符
  • int length(): 返回字符串的长度
public class StringDemo04 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s1 = sc.next();for (int i = 0; i < s1.length(); i++) {System.out.println(s1.charAt(i));}}
}

练习 - 字符串拼接

package com.heima.string;public class StringDemo05 {public static void main(String[] args) {int[] arr = {1, 2, 3};System.out.println(arrToString(arr));}public static String arrToString(int[] nums){if(nums == null){return "";}if(nums.length == 0){return "[]";}String ret = "[";for (int i = 0; i < nums.length; i++) {if(i == 0) {ret += nums[i];}else{ret += ", "+nums[i];}}ret += "]";return ret;}
}

练习 - 手机号屏蔽 ( substring() )

String substring(int beginIndex, int endIndex) 截取
注意点: 区间是左闭右开 [)
String substring(int beginIndex) 截取到末尾
public class StringDemo06 {public static void main(String[] args) {String phone = "13112349468";String newPhone = phone.substring(0, 3)+"****"+phone.substring(7);System.out.println(newPhone); // 131****9468}
}

练习 - 敏感词替换 ( replace() )

String replace(CharSequence oldValue, CharSequence newValue) 替换
public class StringDemo07 {public static void main(String[] args) {String str = "TMD, MTD";System.out.println(str.replace("TMD", "***"));}
}

StringBuilder

概述

  • 介绍: StringBuilder可以看成是一个容器, 创建之后里面的内容是可变的
  • 作用: 提高字符串的操作效率

基本操作

public class StringBuilderDemo1 {public static void main(String[] args) {// 1. 创建对象StringBuilder sb = new StringBuilder();// 2. 添加元素sb.append(1);sb.append(2.3);sb.append(true);// System.out.println(sb); // 12.3true// 3. 反转sb.reverse();// System.out.println(sb); // eurt3.21// 4. 获取长度int len = sb.length();// System.out.println(len); // 8// 5. StringBuilder -> StringString s = sb.toString();}
}

StringJoiner

概述

  • 介绍: StringJoiner和StringBuilder一样, 也可以看成是一个容器, 内容是可变的
  • 作用: 提高字符串的操作效率, 代码编写很简洁
  • Jdk8之后出现

基本操作

import java.util.StringJoiner;public class StringJoinerDemo01 {public static void main(String[] args) {int[] nums = {1, 2, 3};StringJoiner sj = new StringJoiner(", ", "[", "]");for (int i = 0; i < nums.length; i++) {sj.add(nums[i]+"");}System.out.println(sj);}
}

字符串原理

  • 字符串存储的内存原理
    • 直接赋值会复用字符串常量池中的
    • new出来不会复用, 而是开辟一个新的空间
  • ==号比较的是什么
    • 基本数据类型比较数据值
    • 引用数据类型比较地址值
  • 字符串拼接的底层原理
    • 如果没有变量参与, 都是字符串直接相加, 编译之后就是拼接之后的结果, 会复用串池中的字符串
    • 如果有变量参与, 会创建新的字符串, 浪费内存
  • StringBuilder提高效率原理
    • 所有要拼接的内容都会往StringBuilder中存放, 不会创建很多无用的空间, 节约内存
  • StringBuilder源码分析
    • 默认创建一个长度为16的字节数组
    • 添加的内容长度小于16, 直接存
    • 添加的内容大于16会扩容(原来的容量*2+2)
    • 如果扩容之后还不够, 以实际长度为准

综合练习

阿拉伯数字转罗马数字

import java.util.Scanner;public class Demo01 {public static void main(String[] args) {/*** 阿拉伯数字转为罗马数字* 1. 数字范围[1, 9]*/String[] vis = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};Scanner sc = new Scanner(System.in);String s = sc.next();StringBuilder ans = new StringBuilder();for (int i = 0; i < s.length(); i++) {int num = s.charAt(i) - '0';ans.append(vis[num]+" ");}System.out.println(ans);}
}

调整字符串

public class Demo02 {public static void main(String[] args) {/*** 调整字符串* 给定两个字符串A和B* A的旋转操作就是将A最左边的字符移动到最右边* 如果若干次调整后, A能变成B, 则返回true, 反之返回false*/String a = "abcde";String b = "cdeae";boolean flag = false;for (int i = 1; i < a.length(); i++) {char[] chars = a.toCharArray();char ch = chars[0];for (int j = 1; j < chars.length; j++) {chars[j-1] = chars[j];}chars[chars.length-1] = ch;a = new String(chars);if(a.equals(b)){flag = true;System.out.println("Yeah!");break;}}if(!flag){System.out.println("Noo!");}}
}

来源

黑马程序员. 阿玮Java零基础

Gitee地址

https://gitee.com/yu-ba-ba-ba/awJava

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

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

相关文章

Go语言入门心法(十六):Go远程过程调用框架GRPC实战

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

IC-705连接wfview

wfview是一款开源的主要针对ICOM的远程控制软件&#xff0c;可以通过USB或者无线控制电台&#xff0c;貌似还支持X6100。 IC-705支持WLAN功能&#xff0c;连接wfview非常方便。 IC-705的WLAN支持两种模式&#xff0c;一种是Station模式&#xff0c;可用于连接WI-FI路由器&#…

【C++进阶之路】第三篇:二叉搜索树 kv模型

文章目录 一、二叉搜索树1.二叉搜索树概念2.二叉搜索树操作3.二叉搜索树的实现 二、二叉搜索树的应用1.kv模型2.kv模型的实现 三、 二叉搜索树的性能分析 一、二叉搜索树 1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性…

【深度学习实验】循环神经网络(五):基于GRU的语言模型训练(包括自定义门控循环单元GRU)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容&#xff08;一&#xff09;自定义门控循环单元&#xff08;GRU&#xff0c;Gated Recurrent Unit&#xff09;1. get_params2. init_gru_state3. gru &#xff08;二&#xff09;创建模型0. 超参数…

数据库连接池有什么用?它有哪些关键参数?

首先&#xff0c;数据库连接池是一种池化技术&#xff0c;池化技术的核心思想是实现资源的复用&#xff0c;避免资源重复创建销毁的开销。而在数据库的应用场景里面&#xff0c;应用程序每次向数据库发起 CRUD 操作的时候&#xff0c;都需要创建连接.在数据库访问量较大的情况下…

创建并启动华为HarmonyOS本地与远程模拟器及远程真机

1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机

Python---练习:使用for循环嵌套实现打印九九乘法表

思考&#xff1a; 外层循环主要用于控制循环的行数&#xff0c;内层循环用于控制列数。 基本语法&#xff1a; # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 &#xff0c;就可以是range(1, 10) -----也就是从1&#xff0c;到9。 参考while循环…

前端html+css+js实现的2048小游戏,很完善。

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 逻辑用的是JavaScript&#xff0c;界面用canvas实现&#xff0c;暂时还没有添加动画。 视频浏览地址

【从0到1设计一个网关】自研网关的设计要点以及架构设计

文章目录 请求的流程架构设计设计要点项目架构流程设计源码地址: 源码地址 请求的流程 一个HTTP请求发送到网关并完成整个生命周期通常包括以下步骤: 客户端请求: 请求始于客户端,客户端通过HTTP请求(例如GET、POST等)发送请求到API网关的入口点。 API网关接收: API…

python re 匹配所有字段名称相同的值

import retext {"code": 200,"message": "success","traceId": "da0b668c-4d67-44bf-907f-c072fc63839a","data": {"list": [{"articleId": 121862102,"title": "python 目录…

[C#基础训练]FoodRobot食品管理部分代码-1

代码参考: using System;namespace FoodRobotDemo { public class FoodRobot{private int[] foodCountArr;private string[] foodNameArr;public FoodRobot(){foodCountArr new int[3];foodNameArr new string[3] {"航天","航空","宇航" };}…

Java学习笔记(三)

前言 这个主要就是想记录一个点&#xff0c;就是二维数组保存的元素就是一维数组的地址&#xff0c;这个概念大家都知道了&#xff0c;那么接下来就是我最近写程序发生的一个事情了。 随机打乱一个一维数组 这个程序我相信大家都是会写的&#xff0c;通过randomArr来随机打乱…

棒球俱乐部青少年成长体系·棒球1号位

棒球俱乐部青少年成长体系介绍 1. 培养理念 简要介绍棒球俱乐部的宗旨和培养青少年的目标 棒球俱乐部是一个致力于培养青少年棒球运动员的体育组织&#xff0c;其宗旨是通过提供专业的棒球训练和比赛机会&#xff0c;帮助青少年提高身体素质、培养团队合作精神和塑造积极向上…

【vue会员管理系统】篇三之自定义Axios、初试后台接口、跨域问题

一、自定义封装Axios异步对象和添加拦截器 因为本项目很多组件需要通过Axios发送一步请求&#xff0c;所以封装Axios对象&#xff0c;自己封装的Axios在后续可以使用axios中提供的拦截器。 1.在src文件夹下创建utils文件夹&#xff0c;再在utils文件夹下创建request.js文件 2.…

改善游戏体验:数据分析与可视化的威力

当今&#xff0c;电子游戏已经超越了娱乐&#xff0c;成为一种文化现象&#xff0c;汇聚了全球数十亿的玩家。游戏制作公司正采用越来越复杂的技术来提高游戏质量&#xff0c;同时游戏数据分析和可视化工具变得不可或缺。 数据的力量&#xff1a;解析游戏体验 游戏制作涉及到大…

Kubernetes技术与架构-网络 3

Kubernetes集群支持为Pod或者Service申请IPV4或者IPV6的地址空间。 kube-apiserver --service-cluster-ip-range<IPv4 CIDR>,<IPv6 CIDR> kube-controller-manager --cluster-cidr<IPv4 CIDR>,<IPv6 CIDR> --service-cluster-ip-range<IPv4 CI…

Java爬虫实战:API商品数据接口调用

一、引言 随着互联网的发展&#xff0c;越来越多的商家开始将自己的商品数据通过API接口对外开放&#xff0c;以供其他开发者使用。这些API接口可以提供丰富的商品数据&#xff0c;包括商品名称、价格、库存、图片等信息。对于Java爬虫开发者来说&#xff0c;通过调用这些API接…

特约|数码转型思考:Web3.0与银行

日前&#xff0c;欧科云链研究院发布重磅报告&#xff0c;引发银行界及金融监管机构广泛关注。通过拆解全球70余家银行的加密布局&#xff0c;报告认为&#xff0c;随着全球采用率的提升与相关技术的成熟&#xff0c;加密资产已成为银行业不容忽视也不能错过的创新领域。 作为…

YOLOv5源码中的参数超详细解析(3)— 训练部分(train.py)| 模型训练调参

前言:Hello大家好,我是小哥谈。YOLOv5项目代码中,train.py是用于模型训练的代码,是YOLOv5中最为核心的代码之一,而代码中的训练参数则是核心中的核心,只有学会了各种训练参数的真正含义,才能使用YOLOv5进行最基本的训练。🌈 前期回顾: YOLOv5源码中的参数超详细解析…

Redis | 数据结构(01)

这里写自定义目录标题 Redis 速度快的原因除了它是内存数据库&#xff0c;使得所有的操作都在内存上进行之外&#xff0c;还有一个重要因素&#xff0c;它实现的数据结构&#xff0c;使得我们对数据进行增删查改操作时&#xff0c;Redis 能高效的处理。 因此&#xff0c;这次我…