JAVA学习·String类的常用方法

String 类及其创建

String 类的创建

  String 类是 Java 内置的一个类,其完全限定类名是java.lang.String。想要创建一个字符串有多重方式,比如创建字符串"Hello"

String s1 = "Hello"; // 字面量创建
String s2 = new String("Hello"); // 构造函数创建
String s3 = "He" + "llo"; // 字符串连接
String s4 = new String(new char[]{'H','e','l','l','o'}); // 字符数组创建
String s5 = s4.intern();

String 对象在内存中的位置

  上面的s1,s3存在常量池里,而s2,s4存在里。类似于 C 程序的编译,可能编译器在编译String s1 = "Hello"时,将"Hello"存进了可重定位文件的.rodata(只读数据节)中了,并且将这个字符串与s1的联系写进重定位节。s3在编译时预处理,自动计算了"He" + "llo"并也存入.rodata;由于已经有一个"Hello"了,就不再重复加入"Hello",而是直接将s3与之前的那个"Hello"进行重定位。
  s2,s4都是通过new一个新的字符串对象得到的,这个就好比C语言的malloc,分配的空间在内存的堆中。

  s5也是存在常量池里,和s1,s3一样。internString类的一个实例方法,返回字符串对象的字面量。下面是这个方法的 API 注释:
在这里插入图片描述
  从框起来的部分可以看到,intern方法对于str2=str1.intern()处理在内存分配上有两种情况:
1 1 1.str1的字面量已经在常量池里,则直接让str2指向它。此时有str1==str2
2 2 2.str1的字面量不在常量池里,这时str1肯定是在堆里面分配的,JVM会把str1的字面量存入常量池,再令str2指向它。
  所以不管怎么说,通过intern方法得到的引用对象,始终指向常量池

String 类的一些常用方法

字符串比较

  • equalss1.equals(s2)比较s1s2的字面量,如果字面量相等就返回true,否则是false。如果s2==null也是返回false

在 Java 中由于所有非基本数据类型的变量都是引用变量,s1==s2这一语句其实是在判断s1s2是否指向同一个内存区。相当于 C 语言中两个指针==操作。

  • equalsIgnoreCase。忽略大小写的比较。
  • regionMatches。比较部分内容是否相同,这个函数有两个重载的写法:
    • regionMatches(int toffset,String other,int ooffset,int len)。调用s1的该方法,比较s1[toffset]other[ooffset]开始的len个字符是否都相等;如果都相等返回true,否则false
    String s0 = "Java";
    String s2 = "Welcome to Java";
    String s3 = "welcome to java";
    System.out.println(s2.regionMatches(11, s0, 0, 4) ); //true
    System.out.println(s3.regionMatches(11, s0, 0, 4)); //false
    
    • regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 。和上面那个方法用法类似,只是当ignoreCase==true时比较的时候忽略大小写。
    System.out.println(s3.regionMatches(true, 11, s0, 0, 4));//true
    
  • startsWith(s1)判断是否以字符串s1开始。
  • endsWith(s1)判断是否以字符串s1结束。
  • compareTo方法用于比较两个字符串的大小,即第一个不同字符的差值(字典序)。

字符串的长度

  使用length()方法可以返回字符串的长度。注意数组获取长度是length成员,两者不一样。

获取特定位置的字符

  如果是 C 语言直接就是s[index]了,但是 Java 要用s.charAt(index)

连接字符串

  可以直接用加法连接:

String s3 = s1 + s2;

  也可以是调用函数concat

String s3 = s1.concat(s2);

  两者效果一样,但是不会改变s1,s2的值。连接操作返回的是一个独立于s1,s2的新的字符串。

截取字符串

  调用subString方法。有两个重载的subString方法:

  • substring(int beginIndex, int endIndex)返回从beginIndexendIndex-1的片段。
  • substring(int beginIndex)返回从beginIndex到末尾的片段。

字符串转换

  • s1.toLowerCase()s1转换成小写形式,得到新串。
  • s1.toUpperCase()s1转换成大写形式,得到新串。
  • s1.trim()删除s1两端的空格,得到新串。
  • s1.replace(oldChars,newChars)用串newChars替换s1中的所有子串oldChaes,得到新串。

查找字符和字符串

  • indexOf返回字符串中字符或字符串匹配的位置,返回-1表示未找到。
"Welcome to Java".indexOf('W') returns 0.
"Welcome to Java".indexOf('x') returns -1.
"Welcome to Java".indexOf("come") returns 3.
  • indexOf还能加一个参数fromIndex,或者加两个参数beginIndex,endIndex,表示在特定的区间寻找字符/字符串。
"Welcome to Java".indexOf('o‘,5) returns 9.
"Welcome to Java".indexOf("Java", 5) returns 11.
"Welcome to Java".indexOf("java", 5) returns -1.
  • lastIndexOf从字符串末尾开始查找。
"Welcome to Java".lastIndexOf('a') returns 14.

字符数组与字符串的转换

  • 字符串到字符数组,用toCharArray
String s = "Java";
char[ ] charArray = s.toCharArray( );// charArray.length=4
  • 字符数组到字符串,用构造函数,或者静态方法valueOf
String s = new String(new char[ ] {'J','a','v','a'} ); // "Java"
String s = String.valueOf( new char[ ] {'J','a','v','a'} ); // "Java"

基本数据类型和字符串间的转换

  • valueOf方法将基本数据类型转换为字符串
String s1 = String.valueOf(1.0);  //"1.0"
String s2 = String.valueOf(true); //"true"
  • 字符串转换为基本类型:利用包装类
double d = Double.parseDouble(str);
int i = Integer.parseInt(str);
boolean b = Boolean.parseBoolean(str);

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

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

相关文章

在组件外使用pinia的坑

来源 项目包含很多静态的类型,我新建了一个js来专门管理和使用这些类型,如下图这种,有一部分是固定的,千年不变,有一部分是偶尔会变(需要后台获取),还有一部分是要登录后才能拿到的…

python PyQt5 数字时钟程序

效果图: 概述 本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间,并具有以下特性: 始终在最前台显示。窗口可拖动。鼠标右键点击窗口可弹出退出菜单。时间标签具有红色渐变效果。窗口初始化时出现在屏幕…

QT框架软件及其中tcp/udp网络逆向分析要点记录

一. 概述 前一段时间有逆向分析一个windows系统上QT5的软件,要获取其中显示界面中对应数据生成方式。在分析过程中额外去了解QT框架的相关知识是必不可少的,最主要的一点是信号和槽函数怎么对应起来,以及QT中自封装的数据结构怎么处理。框架…

coredump文件生成配置

1.打开coredump文件生成开关 查看开关是否打开:ulimit -a 如果core file size 为0,则为关闭。 执行:ulimit -c 10240 将其coredump文件大小设置。 2.coredump文件保存位置: /proc/sys/kernel/core_pattern文件可以控制core文…

骨折分类数据集1129张10类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1129 分类类别数:10 类别名称:["avulsion_fracture",…

鸿蒙OS开发:【一次开发,多端部署】(导航栏) 导航栏

一多导航栏 介绍 本示例展示了导航组件在不同设备形态下的样式。 在sm设备上,以tabs形式展示,内容、导航为上下样式布局,通过点击底部tabs切换内容;在md/lg设备上,以[SideBarContainer]形式展示,内容、导…

RocketMQ学习(1) 快速入门

mq的一些前置知识和概念知识可以看这篇文章——SpringCloud入门(3) RabbitMQ,比如常见mq的对比等等,这篇文章不再赘述。 目录 RocketMQ概念、安装与配置docker配置 RocketMQ快速入门**同步消息消费模式 **异步消息*单向消息**延迟消息*顺序消息批量消息事…

大工作量LUAD代谢重编程模型多组学(J Transl Med)

目录 1,单细胞早期、晚期和转移性 LUAD 的细胞动力学变化 2,细胞代谢重编程介导的LUAD驱动恶性转移的异质性 3,模型构建 S-MMR评分管线构建 4,S-MMR 模型的预后评估 5, 还开发了S-MMR 评分网络工具 6&#xff0c…

Test-Preparation Phase 测试准备阶段介绍

测试准备阶段是确保测试过程顺利进行的基础阶段,对于DRAM(动态随机存取存储器)等复杂产品的测试尤为重要。以下是Test-Preparation Phase中关于Fault modeling(故障建模)、Test generation(测试数据生成)、Fault simulation(故障模拟)以及DFT&DFM(测试设计与可制…

Windows 使用技巧

Windows 使用技巧 ①局域网内共享文件 ②CTRL Y 和 CTRL Z ①局域网内共享文件 第一步: 选择要共享的文件(分享方操作) 第二步: 右键打开属性,选择共享(分享方操作) 第三步: …

k8s集群配置普通用户权限

集群管理员:负责管理 Kubernetes 集群的用户,拥有最高权限,可以对集群中的资源进行任何操作。 开发者:在 Kubernetes 集群中部署和管理自己的应用,可能有限制的权限,仅能管理特定的命名空间或资源。 第三…

简单得阴影引导实现

效果如下: 实现方式: 1、引入三方库: implementation io.github.razerdp:BasePopup:3.2.0 2、代码实现 class NewUserGuide3Popup : BasePopupWindow {constructor(activity: Activity) : super(activity)constructor(context: Context) : super(con…

js检验一个字符串是否是正确时间格式的工具方法

js检验一个字符串是否是正确时间格式的工具方法 (()> {/*** 检验字符串是否为时间格式* param {String} date 需要检验的时间格式* returns true 为时间格式,false 为非时间格式*/const isTimaFormat (date) > {if(!date) return false;try{const tempTime …

基于maxkey接入jeecgboot并实现账户同步

1. 注册应用 1.1 在统一认证中心注册第三方应用 1.1.1 填写应用名和登录地址 1.1.2 填写认证地址授权方式和作用域 1.1.3 选择权限范围并提交 1.2 配置访问权限 1.2.1 指定用户组 1.1.2 选择注册的应用 1.1.3 在单点登录认证页面查看添加的应用 1.3 同步一个第三方应用的账号…

VolWeb:集中式增强型数字取证内存分析平台

关于VolWeb VolWeb是一款最新开发的集中式增强型数字取证内存分析平台,该平台基于Volatility 3框架实现其功能,该工具旨在辅助广大研究人员执行安全分析和事件应急响应等任务。 VolWeb可以提供集中式、可视化的增强型网络应用程序,并提高安全…

详解 Scala 的泛型

一、协变与逆变 1. 说明 协变:Son 是 Father 的子类,则 MyList[Son] 也作为 MyList[Father] 的 “子类”逆变:Son 是 Father 的子类,则 MyList[Son] 作为 MyList[Father] 的 “父类”不变:Son 是 Father 的子类&…

车机壁纸生成解决方案,定制化服务,满足个性化需求

在数字化与智能化浪潮的推动下,汽车内部设计已不再仅仅满足于基本功能的需求,更追求为用户带来前所未有的视觉享受与沉浸式体验。美摄科技,凭借其在图像生成与处理领域的深厚积累,推出了一款创新的车机壁纸生成解决方案&#xff0…

【FISCO BCOS】二十一、JAVA与FISCO BCOS交互(节点前置篇)

目录 一、准备链和节点前置服务 二、准备合约 三、新建java工程 四、参照API官方

上海市计算机学会竞赛平台2022年10月月赛丙组算式求值(一)

题目描述 给定一个由正整数、加号、减号构成的表达式,请计算表达式的值。 输入格式 输入一个由 正整数、、- 构成的表达式 输出格式 单个整数:表示算式的值。 数据范围 数据保证 输入的字符串长度不超过 100,000100,000,其中出现的每…

代码随想录——左叶子之和(Leetcode404)

题目链接 BFS 队列 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…