String类讲解(1)

news2024/9/29 1:30:53

🐵本篇文章将讲解String类及其包含的方法


一、介绍String类

String属于引用类型,String类是Java的一个内置类,用于表示字符串,String类中具有许多方法,可以用来操作和处理字符串

二、字符串的构造

下面介绍三种构造字符串的方法:

public static void main(String[] args) {
    //1.使用常量串直接赋值
    String str = "hello";
    System.out.println(str); //hello

    //2.使用new关键字创建字符串对象
    String str1 = new String("world");
    System.out.println(str1); //world

    //3.通过字符数组构造字符串
    char[] arr = {'a', 'b', 'c'};
    String str = new String(arr);
    System.out.println(str); //abc

}

以上述代码的第二个例子为例画图讲解:

求字符串的长度和判断字符串是否为空:

public static void main(String[] args) {
    String str1 = "hello";
    System.out.println(str1.length()); //计算字符串str1的长度

    String str4 = "";
    System.out.println(str4.isEmpty()); 
    //判断引用所指向的对象的内容是否为空,若为空返回true,否则返回false

    String str5 = null;
    System.out.println(str5.isEmpty()); //空指针异常
}

三、字符串比较

3.1 ==

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);

由于s1和s2都属于引用类型,所以上述代码实际比较的是s1和s2引用的对象的地址,打印结果为false

但是在以下这种情况会返回true,这涉及到了字符串常量池,以后会讲

String s3 = "hello";
String s4 = "hello";
System.out.println(s3 == s4); //字符串常量池

3.2 boolean equals(Object o)方法

equals方法是Object类中的方法,在Object类中equals方法的功能就是比较两个对象的地址,而在String类中重写了equals方法,其功能是比较字符串对象的内容,若相等返回true,否则返回false

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2)); //true

3.3 int compareTo(String s)方法

该方法和C语言中strcmp函数功能基本一致

        String s1 = new String("abc");
        String s2 = new String("abcd");
        String s3 = new String("azc");

        System.out.println(s1.compareTo(s2)); //-1(字符数的差)
        //1.s1>s2 返回一个大于0的数(s1的ASCII值减去s2的ASCII值)
        //2.s1<s2 返回一个大于0的数(s1的ASCII值减去s2的ASCII值)
        //3.s1=s2 返回0
        System.out.println(s1.compareTo(s3)); //-24

3.4 int compareToIgnoreCase(String s)方法

比较两个字符串但忽略大小写

String s1 = new String("hello");
String s2 = new String("HELLO");
System.out.println(s1.compareToIgnoreCase(s2)); //true

四、字符串查找

<方法> char charAt(int index)

<功能>返回字符串下标为index的字符,如果index为负数或导致越界,则抛出异常

String s1 = new String("hello");
System.out.println(s1.charAt(2)); //l

<方法> int indexOf(int ch)

<功能> 返回ch第一次出现的下标,如果字符串中没有ch则返回-1

String s1 = new String("hello");
int index = s1.indexOf('e');
System.out.println(index); //1

<方法> int indexOf(int ch, int fromIndex)

<功能> 从下标为fromIndex的位置处开始找ch,返回ch第一次出现的下标,若没有则返回-1

String s1 = new String("hello");
int index = s1.indexOf('l', 3);
System.out.println(index); //3

<方法> int indexOf(String str)

<功能> 返回str第一次出现的位置,没有则返回-1,和C语言的strstr用法基本一样

String s = new String("abcdbcd");
int index = s.indexOf("bcd"); //1

<方法> int indexOf(String str, int fromIndex)

<功能> 从fromIndex位置开始找str第一次出现的位置并返回,没有则返回-1

String s = new String("abcdefabc");
int index = s2.indexOf("abc", 3);
System.out.println(index); //6

<方法> int lastIndexOf(int ch)

<功能> 从后往前找,返回ch第一次出现的位置,没有返回-1

String s2 = new String("hello");
int i = s2.lastIndexOf('l'); //3

<方法> int lastIndexOf(int ch, int fromIndex)

<功能> 从fromIndex位置开始从后往前找,返回ch第一次出现的位置,没有返回-1

String s2 = new String("hello");
int i = s2.lastIndexOf('l', 2); //2

<方法> int lastIndexOf(String s)

<功能> 从后往前找,返回字符串第一次出现的位置,没有返回-1

String s2 = new String("abcdefabc");
int i = s2.lastIndexOf("abc");
System.out.println(i); //6

<方法> int lastIndexOf(String s, int fromIndex)

<功能> 从fromIndex位置开始从后往前找从后往前找,返回字符串s第一次出现的位置,没有返回-1

String s2 = new String("abcdefabc");
int i = s2.lastIndexOf("abc", 3);
System.out.println(i); //0

五、字符串转化

5.1 数字与字母之间的转化

//数字转换为字符串
String s1 = String.valueOf(100);
String s2 = String.valueOf(12.4);
String s3 = String.valueOf(true);
System.out.println(s1 +' '+ s2 +' '+ s3); //100 12.4 true 这些都为字符串
        
//字符串转换为数字
int i = Integer.parseInt("123"); //Integer为包装类型,后面会讲
double d = Double.parseDouble("3.14");
System.out.println(i);
System.out.println(d);

5.2 大小写转换

String s = new String("hello");
String ret = s.toUpperCase();
System.out.println(ret); //HELLO

String s1 = new String("HeLLO");
String ret1 = s1.toLowerCase();
System.out.println(ret1); //hello

//若要转换的字符串不是字母,则原样输出

5.3 字符串与数组之间的转换

//字符串转换为数组
String s = new String("hello");
char[] ch = s.toCharArray();
//遍历并打印数组
for (char c : ch) {
    System.out.print(c);
}

//数组转换为字符串
s = new String(ch);
System.out.println(s);

六、字符串替换

String s1 = new String("hehello");
String ret = s1.replaceAll("he", "aa"); //将字符串章所有的he替换为aa
System.out.println(ret); //aaaallo

String ret1 = s1.replaceFirst("he", "aa"); //将字符串中第一个he替换为aa
System.out.println(ret1); //aahello

七、字符串拆分

<方法> String[] split(String regex)

<功能>以regex为分隔符,将整个字符串拆分,若字符串中没有该分隔符则原样输出

String s = new String("undertale&Sans");
String[] ret = s.split("&"); //返回类型为String[]
for (int i = 0; i < ret.length; i++) {
    System.out.print(ret[i] +" "); //undertale Sans
}

<方法> String[] split(String regex, int limit)

<功能>以regex为分隔符,将整个字符串拆分为limit组,若字符串中没有该分隔符则原样输出

String s1 = new String("hello world hello Sans");
String[] ret1 = s1.split(" ", 3); //分成3部分
for (int i = 0; i < ret1.length; i++) {
    System.out.println(ret1[i]);
}

<特殊1>若分隔符为". * +",则要进行转义,在前面加上\\

String s = new String("192.168.1.1");
String[] ret = s1.split("\\."); 
for (int i = 0; i < ret.length; i++) {
    System.out.print(ret[i] +" "); //192 168 1 1
}

<特殊2>

String s1 = new String("192\\168\\1\\1");
String[] ret = s1.split("\\\\"); 
for (int i = 0; i < ret.length; i++) {
    System.out.print(ret[i] + " "); //192 168 1 1
}

<特殊3>若有多个分隔符,则可以用 "|" 将分隔符隔开

String s2 = new String("name=Sans&age=18");
String[] ret3 = s2.split("=|&");
for (int i = 0; i < ret3.length; i++) {
    System.out.print(ret3[i] +" "); //name Sans age 18
}

八、字符串截取

<方法> String subString(int beginIndex)

<功能> 从beginIndex开始截取到字符串结尾

String str = new String("abcdef");
String ret = str.substring(2); // cdef

<方法> String subString(int beginIndex, int endIndex)

<功能> 以区间[beginIndex, endIndex)截取字符串

String str = new String("abcdef");
String ret = str.substring(2, 5); // cde

<其他> String trim()

<功能> 删除字符串开头和结尾的空格

String str = "   abc d f    ";
System.out.println(str);
String ret = str.trim();
System.out.println("["+ ret +"]");


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

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

相关文章

如何迁移数据到水经微图64位版?

我们在《为什么要升级水经微图到64位&#xff1f;》一文中&#xff0c;为大家分享了升级水经微图到64位的原因。 这里&#xff0c;我们再为大家分享一下在哪些情况下升级需要迁移已标注的数据&#xff0c;以及如何迁移已标注绘制的数据到水经微图64位中。 哪些情况需要迁移数…

Webshell混淆免杀的一些思路

简介 为了避免被杀软检测到&#xff0c;黑客们会对Webshell进行混淆免杀。本文将介绍一些Webshell混淆免杀的思路&#xff0c;帮助安全人员更好地防范Webshell攻击。静态免杀是指通过对恶意软件进行混淆、加密或其他技术手段&#xff0c;使其在静态分析阶段难以被杀毒软件或安…

基于oracle数据库的PLSQL编程以及存储过程的创建和使用

PL/SQL编程 declare begindbms_output.put_line(helloworld!);-- line表示换行 end;set serveroutput on; 开启打印输出 / 表示结束变量的声明与赋值 declarev_name varchar2(20) : 张三;v_sal number;v_addr varchar2(200); begin-- 直接赋值v_sal : 1111;-- 语句赋值selec…

继承JsonSerializer+注解实现自定义数据脱敏方案

1、数据脱敏 数据脱敏是一种保护隐私数据的技术&#xff0c;通过将敏感信息转化为非敏感信息来实现对数据的保护&#xff0c;以保护敏感隐私数据的可靠性和安全性。 数据脱敏可以分为可恢复和不可恢复两类: 可恢复类可以通过一定的方式恢复成原来的敏感数据。不可恢复类则无…

UTONMOS:元宇宙时代已经来临

当我们站在这个新的人工智能时代的十字路口&#xff0c;不可避免地要面对一个问题&#xff1a;在这个技术革新的大潮中&#xff0c;区块链技术还有没有生存和发展的空间&#xff1f;本文将深入探讨这个问题&#xff0c;分析区块链在人工智能时代的优势、挑战以及未来的可能性。…

二十章多线程

概念 有很多工作是可以同时完成的&#xff0c;这种思想放在Java中被称为并发&#xff0c;并发完成每一件事被称为线程。 程序员可以在程序中执行多个线程&#xff0c;每一个线程完成一个功能//与其他线程并发执行&#xff0c;这种机制被称为多线程&#xff0c;并不算所有编程…

Java 之 lambda 表达式(二)---- Stream 操作 API

目录 一. 前言 二. Stream 创建 2.1. 使用集合来创建 Stream 2.2. 使用数组创建 Stream 2.3. 由值创建 Stream 2.4. 由函数创建无限流 Stream 2.5. 代码示例 三. Stream 操作 3.1. 中间型操作 3.1.1. filter() 3.1.2. map() 3.1.3. mapToInt()、mapToLong()、mapTo…

ESP32-Web-Server编程- JS 基础5

ESP32-Web-Server编程- JS 基础5 概述 JS 编程内容颇多&#xff0c;我们提供一些简单的示例&#xff0c;先玩再学&#xff0c;边玩边学。 示例1-演示通过 JS 进行温度转换 资源链接 对应示例的 code 链接 &#xff08;点击直达代码仓库&#xff09; 示例2-增加网页弹窗 演…

【数据结构—单链表的实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 链表的概念及结构 2. 单链表的实现 2.1单链表头文件——功能函数的定义 2.2单链表源文件——功能函数的实现 2.3 单链表源文件——功能的测试 3.具体的理解操作…

Selenium 学习(0.14)——软件测试之测试用例设计方法——因果图法2【基本步骤及案例】

1、因果图法的基本步骤 2、案例分析 1&#xff09;分析原因和结果 2&#xff09;关联原因和结果 投入1元5角或2元&#xff0c;按下“可乐”&#xff0c;送出“可乐”【暂时忽略找零】 投入2元&#xff0c;按下“可乐”或“雪碧”。找零5角&#xff0c;送出“可乐”或“雪…

vue中keep-alive的使用

什么是keep-alive&#xff1f; keep-alive是一个内置组件&#xff0c;用于缓存和管理组件的状态。 当 keep-alive包裹一个组件时&#xff0c;这个组件的状态将会被缓存起来&#xff0c;而不是每次重新渲染。这在多个视图之间切换时特别有用&#xff0c;可以避免重复的创建和销…

uniapp前端+python后端=微信小程序支付到底怎么开发???国内的资料为什么没一篇能讲清楚,简简单单的只需要3步就可以了-V2版本

一.微信小程序支付 真的&#xff0c;在接到这个任务的时候&#xff0c;本以为很简单&#xff0c;不就是普通的浏览器复制粘贴&#xff0c;最不济找下gpt给生成一下&#xff0c;但是到实际开发就不同了&#xff0c;不是后端出问题就是前端&#xff0c;搜资料&#xff0c;上百度…

【Rust】基本的语法概念

Rust初学习 常见概念变量与可变性变量常量隐藏 数据类型标量类型字符类型复合类型元组数组 函数参数语句和表达式具有返回值的函数 注释控制流使用循环重复执行 常见概念 变量与可变性 变量 fn main() {let x 5;println!("The value of x is: {x}");x 6;println…

AlphaFold的原理及解读

1、背景 蛋白质是生物体内一类重要的生物大分子&#xff0c;其结构复杂多样&#xff0c;蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看&#xff0c;蛋白质的结构可以分为四个层次&#xff1a;初级结构、二级结构、三级结构和四级结构。 初级结…

中英双语大模型ChatGLM论文阅读笔记

论文传送门&#xff1a; [1] GLM: General Language Model Pretraining with Autoregressive Blank Infilling [2] Glm-130b: An open bilingual pre-trained model Github链接&#xff1a; THUDM/ChatGLM-6B 目录 笔记AbstractIntroduction 框架总结1. 模型架构2. 预训练设置3…

MySQL的Linux安装

在MySQL官网下载压缩包MySQL :: Download MySQL Community Server (Archived Versions) 下载完成后将压缩包上传到Linux中。我这里是下的CentOS的压缩包。 并且用的是FinalShell连接工具&#xff0c;可以选择压缩包直接上传。 ​ 上传完毕后&#xff0c;新建mysql文件夹&…

[DASCTF 2023 0X401七月暑期挑战赛] web刷题记录

文章目录 EzFlask方法一 python原型链污染方法二 flask框架静态文件方法三 pin码计算 MyPicDisk方法一 字符串拼接执行命令方法二 phar反序列化 EzFlask 考点&#xff1a;python原型链污染、flask框架理解、pin码计算 源码如下 import uuidfrom flask import Flask, request, …

Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134561660 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

OpenVINO异步Stable Diffusion推理优化方案

文章目录 Stable Diffusion 推理优化背景技术讲解&#xff1a;异步优化方案思路&#xff1a;异步推理优化原理OpenVINO异步推理Python API同步和异步实现方式对比 oneflow分布式调度优化优势&#xff1a;实现思路 总结&#xff1a; Stable Diffusion 推理优化 背景 2022年&am…

山西电力市场日前价格预测【2023-11-29】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-29&#xff09;山西电力市场全天平均日前电价为275.28元/MWh。其中&#xff0c;最高日前电价为415.78元/MWh&#xff0c;预计出现在17:45。最低日前电价为0.00元/MWh&#xff0c;预计出…