String 类的基本用法及String 类的常见操作

2023-10-30

ced485cbb11e458d81a746890b32cf3f.gif

作者:月亮嚼成星~

博客主页:月亮嚼成星~的博客主页

专栏:Java SE基础

工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网

点击免费注册和我一起刷题吧

 字符串常见三种构造方式:

public class Test {
    public static void main(String[] args) {
        //使用常量串
        String str1="hello";
        //直接使用new String对象
        String str2=new String("hello");
        //利用字符数组
        char[] ch=new char[]{'h','e','l','l','o'};
        String str3=new String(ch);
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }

}

总结:构造字符串的三种方式:

1)使用常量串

2)直接使用new String对象

3)利用字符数组

对字符串引用类型的理解加深 

String是引用类型,内部并不存储字符串本身,在String类的实现源码中,String类实例变量如下:
 

   public static void main(String[] args) {
        String str1="hello";
        String str2="world";
        String str3=str1;
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }

 String对象的比较

1. ==比较是否引用同一个对象,也就是比较地址

  public static void main(String[] args) {
        String str1="hello";
        String str2=new String("hello");
        String str3=str1;
        System.out.println(str1==str2);
        System.out.println(str2==str3);
        System.out.println(str3==str1);
    }


 2. boolean equals(Object anObject) 方法:按照字典序比较

字典序就是字符大小的顺序

 String类重写了父类Object中equals方法,Object中equals默认按照==比较,String重写equals方法后,按照如下规则进行比较,比如: str1.equals(str2)

    public static void main(String[] args) {
        String str1="hello";
        String str2=new String("hello");
        String str3=str1;
        System.out.println(str1==str2);
        System.out.println(str2==str3);
        System.out.println(str3==str1);
        System.out.println(str1.equals(str2));
    }

 系统equals:

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

3. int compareTo(String s) 方法: 按照字典序进行比较
与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:

1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值

    public static void main(String[] args) {
        String str1=new String("abcd");
        String str2=new String("abc");
        String str3=new String("a");
        String str4=new String("ac");

        System.out.println(str1.compareTo(str2));
        System.out.println(str1.compareTo(str3));
        System.out.println(str2.compareTo(str3));
        System.out.println(str1.compareTo(str4));
    }

4. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较

    public static void main(String[] args) {
        String str1=new String("Abcd");
        String str2=new String("aBc");
        String str3=new String("a");
        String str4=new String("ac");

        System.out.println(str1.compareToIgnoreCase(str2));
        System.out.println(str1.compareToIgnoreCase(str3));
        System.out.println(str2.compareToIgnoreCase(str3));
        System.out.println(str1.compareToIgnoreCase(str4));
    }

字符串查找

char charAt(int index) 返回index位置上字符,如果index为负数或者越界,抛出
IndexOutOfBoundsException异常
int indexOf(int ch) 返回ch第一次出现的位置,没有返回-1
int indexOf(int ch, int
fromIndex)
从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str) 返回str第一次出现的位置,没有返回-1
int indexOf(String str, int
fromIndex)
从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch) 从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch, int
fromIndex)
从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返
回-1
int lastIndexOf(String str) 从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str, int
fromIndex)
从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返
回-1
    public static void main(String[] args) {
        String str="aabbccdef";
        System.out.println(str.charAt(2));
        System.out.println(str.indexOf('d'));
        System.out.println(str.indexOf('c',0));
        System.out.println(str.indexOf("bcc"));
        System.out.println(str.lastIndexOf('f'));
        System.out.println(str.lastIndexOf("def"));
        System.out.println(str.lastIndexOf('a',4));
    }


 转化

 1. 数值和字符串转化

String.valueof()

    public static void main(String[] args) {
// 数字转字符串
        String s1 = String.valueOf(1234);
        String s2 = String.valueOf(12.34);
        String s3 = String.valueOf(true);

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }

 

 Integer.parseInt()

Double.parseDouble()

    public static void main(String[] args) {
        // 字符串转数字
// 注意:Integer、Double等是Java中的包装类型
        int data1 = Integer.parseInt("1234");
        double data2 = Double.parseDouble("12.34");
        System.out.println(data1);
        System.out.println(data2);
    }

 2. 大小写转换

toUpperCase()  转大写
toLowerCase()  转小写

    public static void main(String[] args) {
        String str="HELLO";

        System.out.println(str.toLowerCase());
        System.out.println(str.toLowerCase().toUpperCase());

    }

3. 字符串转数组

toCharArray()字符串转数组
new String对象 数组转字符串

    public static void main(String[] args) {
        String str="helloworld";
       char []ch= str.toCharArray();
        for (int i = 0; i < str.length(); i++) {
            System.out.print(ch[i]);
        }
        System.out.println();
        String str2=new String(ch);
        System.out.println(ch);
    }


 4. 格式化

 format

   public static void main(String[] args) {

        String str= String.format("%d-%d-%d",2022,8,15);
        System.out.println(str);
    }

字符串替换 

 使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:

方法 功能
String replaceAll(String regex, String replacement) 替换所有的指定内容
String replaceFirst(String regex, String replacement) 替换首个内容
    public static void main(String[] args) {
        String str = "helloworld" ;
        System.out.println(str.replaceAll("l", "_"));
        System.out.println(str.replaceFirst("l", "_"));
    }

 注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串.

字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串

方法 功能
String[] split(String regex) 将字符串全部拆分
String[] split(String regex, int limit) 将字符串以指定的格式,拆分为limit组
    public static void main(String[] args) {
        String str = "hello world hello bit" ;
        String[] result = str.split(" ") ; // 按照空格拆分
        for(String s: result) {
            System.out.println(s);
        }

    }

  public static void main(String[] args) {
        String str = "hello world hello bit" ;
        String[] result = str.split(" ",2) ; // 按照空格拆分
        for(String s: result) {
            System.out.println(s);
        }

    }

 

字符串截取

从一个完整的字符串之中截取出部分内容。可用方法如下

方法 功能
String substring(int beginIndex) 从指定索引截取到结尾
String substring(int beginIndex, int endIndex) 截取部分内容
 public static void main(String[] args) {
        String str = "helloworld" ;
        System.out.println(str.substring(5));
        System.out.println(str.substring(0, 5));
    }

 

注意事项:
1. 索引从0开始
2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标
 

其他操作方法

方法 功能
String trim() 去掉字符串中的左右空格,保留中间空格
String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写

注意:trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

String 类的基本用法及String 类的常见操作 的相关文章

  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • bee-box

    这篇博客就是为了记下bee box做题过程 随便记记 免得忘了 安装 先去官网下载了 然后分个新的盘单独放进去 打开虚拟机 双击bee box vmx就能安装了 打开里面的火狐会自动跳去一个登录界面 默认账号和密码是bee bug 登录然后
  • GitHub 源代码被泄露了...

    阅读本文大概需要 4 分钟 来自量子位 GitHub 忽然 开源 了自己代码的一部分 还将它放在了 GitHub 上 事件起因是这样的 TypeScript 的开发者 Resynth 忽然 Po 了篇文章 表示代码托管服务 GitHub 的
  • 【牛客网OJ题】不要二

    题目描述 二货小易有一个WH的网格盒子 网格的行编号为 0 H 1 网格的列编号为0 W 1 每个格子至多可以放一块蛋糕 任意两块蛋糕的欧几里得距离不能等于2 对于两个格子坐标 x1 y1 x2 y2 的欧几里得距离为 x1 x2 x1 x
  • spring注解:@Autowired、@Qualifier、@Primary

    Autowired 默认情况下 Autowired 按类型装配 Spring Bean 如果容器中有多个相同类型的 bean 则框架将抛出 NoUniqueBeanDefinitionException 以提示有多个满足条件的 bean 进
  • Raki的读paper小记:SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions

    Abstract Introduction Related Work 研究任务 改进大模型遵循指令的能力 SELF INSTRUCT提供了一种几乎无需注释的方法来使预训练语言模型与指令对齐 已有方法和相关工作 许多研究提出使用语言模型进行数
  • Vue 2.0双向绑定原理的实现

    Object defineProperty方法 vue js是采用数据劫持结合发布 订阅者模式的方式 通过Object defineProperty 来劫持各个属性的setter getter 在数据变动时发布消息给订阅者 触发相应的监听回
  • 分布式系统的正确性验证方法

    分布式系统的正确性验证方法 1 Jepsen框架 Jepsen是一个开源的分布式一致性验证框架 可用于验证分布式数据库 分布式消息队列 分布式协调系统 Jepsen探索特定故障模式下分布式系统是否满足一致性 Jepsen框架是一个
  • 用于构建 RESTful Web 服务的多层架构

    文章出自 Bruce Sun Java 架构师 IBM 简介 由于它简便 轻量级以及通过 HTTP 直接传输数据的特性 RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案 在本文中 我们将概述 REST 和 RES
  • 分享63个最常见的前端面试题及其答案

    在前端面试中 各种面试题都会遇到 因此 今天我们整理了60 比较常见繁杂的面试题 希望这些面试题能够对你有所帮助 当然 这些面试题的答案都不是标准答案 只是对答案做了一个简介明了的说明 希望可以快速帮助你梳理重点核心内容 这些答案可以作为参
  • 密码破解---实验八:Windows本地破解用户口令

    目录 一 实验目的及要求 二 实验原理 1 Windows NT 系统密码存储的基本原理 2 SAM的导出方法 三 实验环境 四 实验步骤及内容 五 实验总结 六 分析与思考 一 实验目的及要求 1 了解Windows2000 XP Ser
  • apache服务详解

    APACHE服务 Apache HTTP Server 简称Apache 是Apache软件基金会的一个开放源码的网页服务器 可以在大多数计算机操作系统中运行 由于其多平台和安全性被广泛使用 是最流行的Web服务器端软件之一 它快速 可靠并
  • [机缘参悟-72]:深度思考-人生自省的四重境界:不觉、自觉、觉他、圆满

    前言 人有觉 自觉 觉他 觉行圆满 阐述了人生自省的三重状态 把 不觉 也放入其中 作为在芸芸众生的起点 福 看天下 众生皆苦 从 福 家来看 身体的劳作都算不上真正的苦 福 学中 对于 苦 有不同的认识 可以总结出人世间八大痛苦 此为众生
  • SpringSecurity源码分析(一) SpringBoot集成SpringSecurity即Spring安全框架的加载过程

    Spring Security是一个强大的并且高度可定制化的访问控制框架 它基于spring应用 Spring Security是聚焦于为java应用提供授权和验证的框架 像所有的spring项目一样 Spring Security真正的强
  • osError cannot load library‘Libsndfile.dll‘:error 0x7e

    解决 1 在所给报错路径下 在site packages文件夹下自己创建一个命名为 soundfile data的文件夹 2 下载libsndfile64bit dll文件 下载地址为https github com bastibe lib
  • MySQL8 详细安装步骤 【附安装包】

    一 准备安装包 方式1 云盘 下载 MySQL8 百度云盘下载地址 地址永久有效 链接 https pan baidu com s 1s BH7uizzuwr8P QAJzH4w 提取码 e2xf 方式2 官网下载 MySQL官网下载安装包
  • part2:服务器接收企业微信用户消息

    流程概括 PART1 阿里云服务器配置 购买并配置阿里云服务器 这里选择的是ESC云服务器 centOS7操作系统 配置安全组 开放端口 允许外部访问你的服务器 购买域名并解析到服务器端 申请ssl证书并下载 PART2 远程操作服务器 下
  • js事件 及 事件对象event

    事件类型 鼠标事件 click 点击 dblclick双击 mouseover mouseenter鼠标移入 mouseout mouseleave鼠标离开 onmouseover和onmouseenter的区别 onmouseout和on
  • TCP连接+数据库项目之零碎知识点

    服务器 绑定数据库 和客户端建立连接及传输需要建立的注意点 1 如果要发送结构体中的数据 那么struct中不能使用char 或者string类 因为char 本质上是指针 而指针是通过操作地址来查找数据的 所以服务器接收到的数据只有4个字
  • 2022年最新Vue+electron项目创建

    一 前言 大多数文章都停留在electron vue中 但是这个库不怎么更新了 最近的更新是九月前 看了很多文章都换其他的工具来构建了 这里推荐GITHUB一个大佬写的基于vue cli的插件 构建项目非常简单 插件的GITHUB源代码 话
  • String 类的基本用法及String 类的常见操作

    作者 月亮嚼成星 博客主页 月亮嚼成星 的博客主页 专栏 Java SE基础 工欲善其事必先利其器 给大家介绍一款超牛的斩获大厂offer利器 牛客网 点击免费注册和我一起刷题吧 字符串常见三种构造方式 public class Test