JavaSE【 String 类】

news2024/9/24 5:28:57

一、String

1、字符串构造

常用三种

 String的构造方法:有带参数的,和不带参数的

public class Test {
    public static void main(String[] args) {
        //字符串直接赋值
        String str = "hello";
        //string是一个引用类型,str这个变量存的是一个地址
        //但我们输出str的时候,却输出了字符串str表示的内容"hello"
        //因为String重写了toString方法
        System.out.println(str);//hello,字符串常量,没有\0标记结尾

        //String有自己的构造方法,有不带参数的,有带参数的
        //实例化字符串对象
        String str2 = new String();
        System.out.println(str2);//输出的是一行空行

        String str3 = new String("str3:hello");
        System.out.println(str3);//str3:hello

        //把字符数组,变成字符串
        char[] array = {'a','b','c'};
        String str4 = new String(array);
        System.out.println(str4);

        String str5 = new String(array,0,2);//从下标0位置,拿2个
        System.out.println(str5);//ab

    }
}

2.string对象里的value和hash

从Java源代码里可以看到String里有两个成员变量:value和hash

 并且在调试代码的时候,能看到s1、s2、s3里都有这两个成员变量

 

3.String对象的长度(字符串长度) 

public static void main2(String[] args) {
        // s1和s2引用的是不同对象 s1和s3引用的是同一对象
        String s1 = new String("hello");
        String s2 = new String("world");
        String s3 = s1;

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

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

        String str1 = "";//str1所指向的对象里面没有字符串
        System.out.println(str1.length());//0
        System.out.println(str1.isEmpty());//true
        String str2 = null;//str2不指向任何一个对象
        //System.out.println(str2.length());//err,不指向任何对象,怎么会有长度呢
        //System.out.println(str2.isEmpty());//err

        //字符串.length()
        System.out.println("hello".length());
    }
System . out . println ( str1 . length ()); // 获取字符串长度 --- 输出 0
System . out . println ( str1 . isEmpty ()); // 判断字符串是否为空, 如果字符串长度为 0 ,返回 true ,否则返回 false

 

二、字符串比较

public static void main3(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1 == s2);//false,因为s1和s2存的是地址,两个地址是不一样的

        //比较内容 返回值是boolean类型
        System.out.println(s1.equals(s2));//true,比较的是hello内容

        //比较字符串大小 compareTo
        /**
         * 类似于C语言的strcmp()
         * 逐个字符比较,如果 s1 > s2返回正数,如果 s1 < s2返回负数,s1 = s2返回 0
         */
        String str1 = new String("abc");
        String str2 = new String("acd");
        System.out.println(str1.compareTo(str2));//-1

        /**
         * 忽略大小写比较 compareToIgnoreCase
         */
        String str3 = new String("Abc");
        String str4 = new String("abC");
        System.out.println(str3.compareToIgnoreCase(str4));//0,忽略大小写都是abc,一样的

    }

1. ==比较是否引用同一个对象

注意:对于内置类型, == 比较的是变量中的值;对于引用类型 == 比较的是引用中的地址。

2.字符串内容比较

1)比较内容是否相等(equals)

boolean equals(Object anObject) 方法:按照字典序比较
字典序:字符大小的顺序

 

2)比较字符串大小(compareTo)

 

3)比较字符串大小忽略大小写(compareTo)

一般验证码就是忽略大小写比较的

 三、字符串查找

1.char charAt(index)查找下标index位置的字符

char charAt(int index)
返回 index 位置上字符
如果 index 为负数或者越界,抛出 IndexOutOfBoundsException异常
 public static void main(String[] args) {
        String s1 = "hello";
        char ch = s1.charAt(1);//返回下标1的字符,e
        System.out.println(ch);//如果,下标超过字符串长度,报错StringIndexOutOfBoundsException字符串下标越界异常

        for (int i = 0; i < s1.length(); i++) {
            System.out.println(s1.charAt(i));
        }

    }

 


2. int indexOf 从前往后,找字符或者字符串第一次出现的位置

1) int indexOf(ch) 

int indexOf(int ch)
默认,从头往后查找。
返回 ch 第一次出现的位置,没有返回 -1
 public static void main(String[] args) {
        String s1 = "hello";
        int index = s1.indexOf('l');//默认从头往后,返回s1里字符l第一次出现的位置
        System.out.println(index);//2
    }

 2)int indexOf(char ch, int fromIndex) 

int indexOf(char ch, int fromIndex)
fromIndex 位置开始找 ch 第一次出现的位置,没有返回 -1
 public static void main(String[] args) {
        String s1 = "hello";
         //indexOf('l',1);从指定位置1下标开始往后找
        int index = s1.indexOf('l',1);
        System.out.println(index);//2
    }

 

3)int indexOf(String str) 

int indexOf(String str)
返回 str 第一次出现的位置,没有返回 -1
 public static void main(String[] args) {

        //可以找字符串
        String s2 = "aababcabcd";
        int  index2 = s2.indexOf("abc");
        System.out.println(index2);//3


    }

4)int indexOf(String str, int fromIndex) 

int indexOf(String str, int fromIndex)
fromIndex 位置开始找 str 第一次出现的位置,没有返回 -1
public static void main(String[] args) {

        //可以找字符串,同理
        //indexOf("abc");默认从头往后,找字符串abc第一次出现的位置
        //indexOf("abc",1);从指定位置1下标开始往后找
        String s2 = "aababcabcd";
        int  index2 = s2.indexOf("abc",1);
        System.out.println(index2);//3


    }


3.int lastIndexOf 从后往前,找字符或者字符串第一次出现的位置

1)int lastIndexOf(int ch) 

int lastIndexOf(int ch)
从后往前 找,返回 ch 第一次出现的位置,没有返回 -1
public static void main(String[] args) {
        String s1 = "aababcabcd";
        int index =  s1.lastIndexOf('c');
        System.out.println(index);//8

    }


2)int lastIndexOf(int ch, int fromIndex) 

int lastIndexOf(int ch, int fromIndex)
fromIndex 位置开始找, 从后往前 ch 第一次出现的位置,没有返回-1
public static void main(String[] args) {
        String s1 = "aababcabcd";
        int index = s1.lastIndexOf('a',5);
        System.out.println(index);//3
    }


3)int lastIndexOf(String str) 

int lastIndexOf(String str)
从后往前 找,返回 str 第一次出现的位置,没有返回 -1
 public static void main(String[] args) {
        String s1 = "aababcabcd";
        int index = s1.lastIndexOf("abc");
        System.out.println(index);//6
    }

 


4)int lastIndexOf(String str, int fromIndex) 

int lastIndexOf(String str, int fromIndex)
fromIndex 位置开始找, 从后往前 str 第一次出现的位置,没有返回-1
 public static void main(String[] args) {
        String s1 = "aababcabcd";

        int index = s1.lastIndexOf("abc",3);
        System.out.println(index);//3
    }

 

 四、转化

1.数字、字符串之间转换

数字转化为字符串 String.valueOf

字符串转数字 Integer.parseInt

 public static void main(String[] args) {
// 数字转字符串 可以支持整型 浮点型 boolean 以及自定义类型
        String s1 = String.valueOf(1234);
        String s2 = String.valueOf(12.34);
        String s3 = String.valueOf(true);
        //String s4 = String.valueOf(new Student("Hanmeimei", 18));

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        //System.out.println(s4);
        System.out.println("=================================");

// 字符串转数字
// 注意:Integer、Double等是Java中的包装类型,这个后面会讲到
        int data1 = Integer.parseInt("1234");
        double data2 = Double.parseDouble("12.34");
        System.out.println(data1);
        System.out.println(data2);
    }

 

 2.大小写转换

// 小写转大写
s1 . toUpperCase ()
// 大写转小写
s2 . toLowerCase ()
 public static void main(String[] args) {
        String s1 = "hello";
        //转变为大写后,是一个新的对象,用ret来接收
        String ret = s1.toUpperCase();
        System.out.println(s1);
        System.out.println(ret); //HELLO

        String s2 = "HELLO";
        String ret2 = s2.toLowerCase();
        System.out.println(s2);
        System.out.println(ret2);//hello

    }

 3.字符串、数组之间的转换

// 字符串转数组
char [] ch = s . toCharArray ();
// 数组转字符串
String s2 = new String ( ch );
public static void main(String[] args) {
        String s1 = "hello";
        //字符串 转化为 数组
        char[] array = s1.toCharArray();
        System.out.println(Arrays.toString(array));

        char[] array2 = {'a','b','c'};
        //数组 转化为 字符串
        String s2 = new String(array2);
        System.out.println(s2);
    }

 

 4.格式化

String s = String . format ( "%d-%d-%d" , 2019 , 9 , 14 );
public static void main(String[] args) {
       
        String s = String.format("%d-%d-%d",2023,8,6);
        System.out.println(s);
    }

五、字符串替换 replace

String replace(CharSequence target, CharSequence replacement) 替换字符序列
String replace(char oldChar, char newChar) 替换字符

String replaceAll(String regex, String replacement)  替换所有的指定内容
String replaceFirst(String regex, String replacement) 替换首个内容(字符串)
public static void main(String[] args) {
        String str = "abcabcabcabc";
        //把ab替换为666
        String ret = str.replace("ab","666");
        System.out.println(ret);
        //把a替换为9
        ret = str.replace('a','9');
        System.out.println(ret);
        
        //只替换第一个ab为666
        ret = str.replaceFirst("ab","666");
        System.out.println(ret);
        
        //把所有的ab替换成666  replace包含replaceAll 
        ret = str.replaceAll("ab","666");
        System.out.println(ret);

    }

 

 六、字符串拆分 split

String[] split(String regex) 将字符串全部拆分
String[] split(String regex, int limit) 将字符串以指定的格式,拆分为limit
注意事项 :
1. 字符 "|","*","+" 都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用 "|" 作为连字符

1.普通字符串拆分 

public static void main(String[] args) {
        String str = "hello abc world";
        //通过空格将字符串分割
        String[] ret = str.split(" ");
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
        System.out.println("===========");
        //通过空格将字符串分割成 2 部分
        ret = str.split(" ",2);
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
    }

 

2.特殊符号拆分

1)拆分ip地址 的.

public static void main(String[] args) {
        //拆分ip地址
        String str = "192.168.1.1";
        String[] ret = str.split("\\.");
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
    }

 2)拆分\\

public static void main(String[] args) {
        //拆分\\
        String str = "192\\168\\1\\1";
        String[] ret = str.split("\\\\");
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
    }

 3)多个分隔符 拆分

 public static void main(String[] args) {
        //多个分隔符 用|连接
        String str = "name=zhangsan&age=10";
        String[] ret = str.split("=|&");
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
    }

多次拆分:在第一次分割的基础上,进行第二次分割

 public static void main(String[] args) {

        //也可以在第一次分割的基础上,进行第二次分割
        String str = "name=zhangsan&age=10";
        String[] ret = str.split("&");
        for (int i = 0; i < ret.length; i++) {
            //System.out.println(ret[i]);
            String str2 = ret[i];
            String[] ret2 = str2.split("=");
            for (int j = 0; j < ret2.length; j++) {
                System.out.println(ret2[j]);
            }
        }
    }

 

七、字符串截取

String substring(int beginIndex)
从指定索引截取到结尾
String substring(int beginIndex, int endIndex)
截取部分内容
 public static void main(String[] args) {
        String str = "abcdefghi";
        //字符串截取
        //区间截取[ )左闭右开
        String ret = str.substring(0,3);
        System.out.println(ret);//abc
        //截取指定起始位置后的字符串
        ret = str.substring(2);
        System.out.println(ret);//cdefghi
    }

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

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

相关文章

【Redis】Redis 的学习教程(一)入门基础

1. 简介 Redis 全称&#xff1a;Remote Dictionary Server&#xff08;远程字典服务器&#xff09;&#xff0c;是一款开源的&#xff0c;遵守 BSD 协议&#xff0c;使用 C 语言开发的 key-value 存储系统。简单的说&#xff0c;它是一款跨平台的非关系型数据库&#xff0c;支…

第 111 场LeetCode 双周赛题解

A 统计和小于目标的下标对数目 数据量小&#xff0c;直接枚举数对 class Solution { public:int countPairs(vector<int> &nums, int target) {int n nums.size();int res 0;for (int i 0; i < n; i)for (int j 0; j < i; j)if (nums[i] nums[j] < tar…

day23 遍历 所有文件夹 子文件夹 文件

统计目录大小 public static long getAllFilesLength(File file) {long length 0l;if (file null) {System.out.println("文件为空");}long fileLengths[] new long[0];File files[] file.listFiles();for (int i 0; i < files.length; i) {if (files[i].isD…

用例图的基本概念及其使用方式(包含案例)

一、引言 用例(Use Case)&#xff0c;是软件工程或系统工程中对系统如何反应外界请求的描述&#xff0c;是一种通过用户的使用场景来获取需求的技术。此概念“用例”的提出者为Ivar Jacobson。每个用例提供了一个或多个场景&#xff0c;该场景说明了系统是如何和最终用户或其它…

C++(8.21)c++初步

1.斐波那契&#xff1a; #include <iostream> #include<iomanip>using namespace std;int main() {cout << "Hello World!" << endl;int a[10];for(int i0;i<10;i){if(0i||1i){a[i]1;}elsea[i]a[i-1]a[i-2];cout <<setw(4) <&l…

微信扫码报修系统哪家好?的修报修管理系统有什么优势?

“的修app”是一款基于互联网和云计算技术的在线报修系统&#xff0c;主要服务于物业管理公司、企业、机关单位、学校、医院等机构和组织。它提供了一系列报修管理服务&#xff0c;包括故障报修、设备管理、巡检管理、耗材管理等功能。用户只需用手机扫一下二维码&#xff0c;即…

Linux 多线程中执行fork的情况

一、普通多线程中执行fork的情况 1.多线程中没有执行fork的情况 代码如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<pthread.h> #include<string.h> #include<semaphore.h>void*fun(void* arg) …

PSP - 基于开源框架 OpenFold Multimer 蛋白质复合物的结构预测与BugFix

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132410296 AlphaFold2-Multimer 是一个基于 AlphaFold2 的神经网络模型&#xff0c;可以预测多链蛋白复合物的结构。该模型在训练和推理时都可以处…

Lnton羚通算法算力云平台如何在OpenCV-Python中使用cvui库创建复选框

CVUI 之 复选框 Python import numpy as np import cv2 import cvuidef checkbox_test():WINDOW_NAME Checkbox-Testchecked [False]# 创建画布frame np.zeros((300, 400, 3), np.uint8)# 初始化窗口cvui.init(WINDOW_NAME)while True:# 画布填色frame[:] (100, 200, 100…

WEB APIs day5

一、window对象 BOM属于window对象 1.BOM&#xff08;浏览器对象模型&#xff09; bom里面包含着dom,只不过bom我们平时用得比较少&#xff0c;我们经常使用的是dom操作&#xff0c;因为我们页面中的这些标签都是在dom中取的&#xff0c;所以我们操作dom多一点。 window对象…

大数据、人工智能、机器学习、深度学习关系联系前言

1.大数据和人工智能关系 2.机器学习、深度学习、人工智能关系 3.监督学习、无监督学习、半监督学习、强化学习、迁移学习关系 4.机器学习具体内容 一、大数据和人工智能之间存在相促进并相互支持&#xff0c;推动了科技发展 1.数据驱动的人工智能&#xff1a;人工智能系统需要…

【是C++,不是C艹】 手把手带你实现Date类(附源码)

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 恍惚间&#xff0c;已经两个月没更新了 &#xff08;&#xff1b;д&#xff40;&#xff09;ゞ 我忏…

K8s+Docker+KubeSphere+DevOps笔记

K8sDockerKubeSphereDevOps 前言一、阿里云服务器开通二、docker基本概念1.一次构建、到处运行2、docker基础命令操作3、docker进阶操作1.部署redis中间件2.打包docker镜像 三、kubernetes 大规模容器编排系统1、基础概念&#xff1a;1、服务发现和负载均衡2、存储编排3、自动部…

基于springboot+vue的流动人口登记系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

因果推断(五)基于谷歌框架Causal Impact的因果推断

因果推断&#xff08;五&#xff09;基于谷歌框架Causal Impact的因果推断 除了传统的因果推断外&#xff0c;还有一些机器学习框架可以使用&#xff0c;本文介绍来自谷歌框架的Causal Impact。该方法基于合成控制法的原理&#xff0c;利用多个对照组数据来构建贝叶斯结构时间…

javaScript:常用的js字符串方法

目录 一.前言 二.字符串方法 1.charAt(num) 获取字符串指定位置上的字符 解释 示例 注意 2.length属性 获取字符串长度 解释 示例讲解 3.substring()字符串的截取 解释 特点 示例 4.slice()字符串截取 解释 特点 示例 应用 单行文本加省略号 字符串劫…

Dockerfile制作镜像与搭建LAMP环境

1、编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私有仓库。 具体要求如下&#xff1a; &#xff08;1&#xff09;基于centos基础镜像&#xff1b; &#xff08;2&#xff09;指定作者信息&#xff1b; &#xff08;3&#x…

卷积神经网络——中篇【深度学习】【PyTorch】

文章目录 5、卷积神经网络5.5、经典卷积神经网络&#xff08;LeNet&#xff09;5.5.1、理论部分5.5.2、代码实现 5.6、深度卷积神经网络&#xff08;AlexNet&#xff09;5.6.1、理论部分5.6.2、代码实现 5.7、使用块的网络&#xff08;VGG&#xff09;5.7.1、理论部分5.7.2、代…

从浅到深研究矩阵的特征值、特征向量

本篇特征值、特征向量笔记来源于MIT线性代数课程。 矩阵特征值与特征向量 ✨引言✨什么是特征向量呢&#xff1f;✨表示✨从特例看特征值与特征向量✨如何求解方程▶️ 思路&#xff1a;✨对称矩阵例子&#xff1a;✨对比观察两个矩阵及它们的特征值及特征向量&#xff1a;✨旋…

C语言小白急救 整型与浮点型在内存中的存储(理论知识+代码示例)

文章目录 一、有无符号整型的存储1.整形家族2.整形在内存中的存储3.大小端介绍4.signed 与 unsigned 类型存储例子&#xff1a;1.2.3.4.5. 二、浮点型的存储1.浮点型家族2.浮点型的存储例子&#xff1a; 一、有无符号整型的存储 1.整形家族 字符在内存中存储的是字符的ASCII码…