对于String的用法详解

article/2025/8/15 12:50:31

目录

一、String的基本用法

二、对于字符串常量池的理解。

三、String类的常见操作。

四、StringBuffer和StringBuilder的使用。


一、String的基本用法

1.1String的创建方法

//第一种创建方法
String str="Hellow";
System.out.println(str);//第二种创建方法
String str02=new String("Hellow");
System.out.println(str02);//第三种创建方法
char[] chars={'q','w','e','c'};
String str03=new String(chars);
System.out.println(str03);

 注意:String是引用类型,指向堆中的地址。

String str="Hellow";
String str02=str;
str="hellow";
System.out.println(str);
System.out.println(str02);

 此时可以看出str的改变不会让str02改变。

1.2字符串中间的比较。

正常情况下:

String str="Hellow";
String str02="Hellow";
System.out.println(str==str02);//true
String str="Hellow";
String str02="Hellow";
System.out.println(str.equals(str02));//true
String str="Hellow";
String str02="hellow";
System.out.println(str==str02);//false
String str="Hellow";
String str02="hellow";
System.out.println(str.equals(str02));//false

注意: 

String str="Hellow";
String str02=new String("Hellow");
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//false

 我们会发现str==str02为false,这是为什么呢?

接下来我们就会引用字符串常量池的概念。

二、对于字符串常量池的理解。

2.1什么是字符串常量池

就拿String str="Hellow"来说

而 String str02=new String("Hellow")是以这种方式存储

我们找到==比较的是String引用的地址,new一个对象时,会在堆中创建一个对象使它指向字符串常量池中的对象。

String类型定义的字符串都在字符串常量池。 

 2.2intern的用法

String str="Hellow";
String str02=new String("Hellow");
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//false

 想要使他们相等我们就要使用intern方法进行入池操作

String str="Hellow";
String str02=new String("Hellow").intern();
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//true

2.3字符串的不可变性

String str = "hello" ; 
str = str + " world" ; 
str += "!!!" ; 
System.out.println(str); 
// 执行结果
hello world!!!

 这个代码看似是在str上进行操作,其实是创建了很多个对象,最后引用最后的对象,字符串在正常情况下不能被改变。

三、String类的常见操作。

3.1字符与字符串之间的转换

3.1.1字符------->字符串

    public static void main(String[] args) {char[] chars={'a','b','c','d','e'};//直接转换String str=new String(chars);//从第1个到第3个String str01=new String(chars,1,3);System.out.println(str);System.out.println(str01);}

3.1.2字符串------->字符

    public static void main(String[] args) {String str="abcdefg";//1、对于单个类容的截取char ch=str.charAt(1);System.out.println(ch);//2、转换成char[]类型的数组char[] chars=str.toCharArray();for (char c:chars) {System.out.println(c);}}

 3.2字节与字符串的转换

3.2.1字节------->字符串

    public static void main(String[] args) {byte[] bytes={'1','2','3'};//1、直接转换String str=new String(bytes);System.out.println(str);//2、部分转换String str2=new String(bytes,1,2);System.out.println(str2);}

3.2.2字符串------->字符

    public static void main(String[] args) throws UnsupportedEncodingException {String str="小杨";//1.直接转换byte[] bytes=str.getBytes();for (byte b:bytes) {System.out.println(b);}//2、转码转换处理byte[] bytes1=str.getBytes("utf-8");//可以转换成别的字符串for(byte e:bytes1){System.out.println(e);}}

 对于这种异常我们直接抛出就行了。

注意:char[] 更适合对于文本的处理(文本数据)

           byte[] 更适合网络传输(二进制编码)

3.3对于字符串的比较

    public static void main(String[] args) {String str="Hellow";String str02="Hellow";//区分大小写比较System.out.println(str.equals(str02));//不分大小写比较System.out.println(str.equalsIgnoreCase(str02));//相等返回0,小于返回负数,大于返回正数System.out.println(str.compareTo(str02));}

3.4对于字符串的查找 

    public static void main(String[] args) {String str="qwemnbxvcqwe";//判断一个子字符串存在System.out.println(str.contains("qwe"));//ture//查找操作System.out.println(str.indexOf("nb"));//4System.out.println(str.indexOf("q", 3));//9System.out.println(str.lastIndexOf("q"));//9System.out.println(str.lastIndexOf("q", 5));//0//判断字符串是否以指定位置开头System.out.println(str.startsWith("qw"));//tureSystem.out.println(str.startsWith("w", 1));//ture//判断是否以指定位置结尾System.out.println(str.endsWith("qwe"));//ture}

3.5对于字符串的替换 

    public static void main(String[] args) {String str="qwesdfsdfqwe";//对于字符串的替换String str01=str.replace('q','w');System.out.println(str01);//wwesdfsdfwweString str02=str.replaceAll("q","z");System.out.println(str02);//zwesdfsdfzweString str03=str.replaceFirst("q","z");System.out.println(str03);//zwesdfsdfqwe}

注意: 对于字符串的替换是创建一个新的字符串,不是更改原来的字符串

3.6对于字符串的拆分

    public static void main(String[] args) {String str="hello world hello bit";String[] strings=str.split(" ");for (String s:strings) {System.out.println(s);}String str01="hello world hello bit";String[] strings01=str01.split(" ",2);for (String s:strings01) {System.out.println(s);}}

注意: 有些分隔要加上“\”才能使用

3.7对于字符串的截取

    public static void main(String[] args) {String str="helloworld";System.out.println(str.substring(2));//从0开始不包含4下标System.out.println(str.substring(0, 4));}

四、StringBuffer和StringBuilder的使用。

    public static void main(String[] args) {StringBuffer sb=new StringBuffer();sb.append("qwe").append("wwedq");System.out.println(sb);}

StringBuffer和String的区别是StringBuffer可以在原有的基础上进行修改。

我们可以在原有的字符串上进行其他的修改

例如:

    public static void main(String[] args) {StringBuffer sb=new StringBuffer();//添加sb.append("qwe").append("wwedq");System.out.println(sb);//qwewwedq//反转System.out.println(sb.reverse());//qdewwewq//删除System.out.println(sb.delete(1, 3));//qwwewq}

注意:解释String、StringBuffer、StringBuilder的区别

1、String中的内容不可修改、而StringBuffer和StringBuilder中的内容可以修改。

2、StringBuffer和StringBuilder中的内容大致相似。

3、StringBuffer采用同步处理,线程安全操作;而StringBuilder未采用同步处理,线程不安全。


http://chatgpt.dhexx.cn/article/i8FDKpjV.shtml

相关文章

String类的常见用法

目录 1、创建字符串的四种方式:(方式一和方式四最常用) 2、字符串的字面量(也是字符串的对象) 3、字符串比较 4、关于字符串的常量池问题 5、手工入池—String 类提供的 intern 方法 6、字符串的不可变性: 7、修…

非抢占式多级反馈队列优先级调度算法 C++实现

介绍 前段时间比较忙,没有更新,这次的也是操作系统的一个实践作业 C实现非抢占式多级反馈队列优先级调度算法,希望可以帮到你们。 问题介绍 这里我用课件里的内容 1.应设置多个就绪队列,并为每个队列赋予不同的优先级。第一个队…

多级反馈队列算法补充

http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf 本文是多级反馈队列(multi-level feedback queue,MLFQ)算法的一些小补充(两个缺陷与修改方法),参考了上面链接。因为自己用中文没有搜到想要的…

操作系统-多级反馈队列

概述 1962年,Corbato首次提出多级反馈队列,应用于兼容时分共享系统(CTSS)。Corbato因在CTSS中的贡献和后来在Multics中的贡献,获得了ACM颁发的图灵奖(Turing Award)。该调度程序经过多年的一系列优化,出现在许多现代操作系统中。 …

操作系统学习(二):浅析多级反馈队列MLFQ

目录 0、引言 1、多级反馈队列(MLFQ)的基本规则 2、MLFQ的规则具体说明 3、MLFQ调优及其他问题 4、总结 0、引言 在上篇文章操作系统学习(一):浅析操作系统进程调度算法中讲到,在一个通用的操作系统中…

多级反馈队列调度算法(附Python3实现代码)

一、多级反馈队列调度算法 多级反馈队列调度算法是进程调度的一种算法,该调度算法可以不用事先知道各种进程所需的执行时间,还可以较好的满足各种类型进程的需要,是目前共认的一种较好的进程调度算法。 那你可能马上就要问了,多…

调度:多级反馈队列

多级反馈队列(Multi-level Feedback Queue, MLFQ)是有Corbato在1962年提出的,用于兼容时分共享系统。现在其经过多年的优化,已经被应用于很多现代操作系统中。多级反馈队列是为了解决两方面问题。一:优化周转时间。在之…

多级队列调度和多级反馈队列调度算法的实现

多级队列调度算法 操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列调度和多级反馈队列调度算法 https://blog.csdn.net/weixin_46291251/article/details/115530582 实验三&…

多级反馈队列调度算法模拟实现

实验一 多级反馈队列调度算法 一. 主要实现方法和代码介绍 ​ 1.编写进程类,其只包含所需的运行时间和进程编号两个属性,还有一个运行方法,此方法就是将所需的运行时间属性减去.传入的运行时间. ​ 2.创建进程函数:创建maxp个进程,(应该不超过10,在此创建九个,即暂时不进行进…

计操实验 多级反馈队列C语言

计操实验 多级反馈队列C语言 需求: 1.队列4级,每一级的队列长度均为10;第一级的时间片为T,第二级的时间片为2T,第三级的时间片为4T,第四级的时间片为8T;(T的大小自己定) …

【操作系统】轮转和多级反馈队列

随着计算机的技术逐渐步入家用后,新的调度指标接踵而来,周转时间已经不能满足人们日常工作的需求,更多时候人们更希望计算机能有更好的交互性,使其能更快地去响应任务,由此针对优化响应时间的调度策略也遍地开花&#…

多级反馈队列调度算法(c++)

如果对你有帮助,可以给卑微的博主留个赞、关注、收藏 (不是) (骗一下数据,说不定以后面试就过了,拜谢) 操作系统基本调度算法,多级反馈队列调度算法。在划分时间片的调度算法中,多级反馈队列算法兼顾提高系统吞吐…

多级反馈队列调度算法

实验目的: 在Linux下编程实现多级反馈队列调度算法,采用三级调度策略,所有进程先按到达顺序进入一级队列,按照时间片为2轮转一次,一个时间片内未完成的进程被依次移入二队列尾部。当一级队列中没有进程时,开…

多级反馈队列调度

多级反馈队列 ​ 多级反馈队列(Multi-level Feedback Queue, MLFQ),与上个世纪70年代提出,主要应用于时分共享系统。主要解决两方面问题:一个是优化周转时间,一个是要给用户很好的交互体验。ML…

多级反馈队列算法

步骤: 0时刻,P1到达就绪队列(时间片为4的)P1先执行2ms,P2到达还未到时间片,P1继续执行2ms后,时间片到达了,P1滑到下一个就绪队列(时间片为6的)此时&#xff…

linux多级反馈队列的实现,多级反馈队列调度算法详解

通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列。例如,如果前台和后台进程分别具有单独队列,那么进程并不从一个队列移到另一个队列,这是因为进程不会改变前台或后台的性质。这种设置的优点是调度开销低&…

对数线性模型

http://blog.csdn.net/pipisorry/article/details/52788947 特征和指示特征 对数线性模型log linear model 对数线性模型有:最大熵模型和逻辑斯谛回归。 [概率图模型原理与技术] [PGM:无向图模型:马尔可夫网 ] 皮皮blog 最大熵模型的一般形式…

广义线性模型(Generalized Linear Model)之三:Poisson回归

广义线性模型(Generalized Linear Model)之三:Poisson回归 一、泊松回归(Poisson regression)简介(一)泊松回归(二)计数数据(三)泊松分布1&#x…

MIT自然语言处理第五讲:最大熵和对数线性模型

MIT自然语言处理第五讲:最大熵和对数线性模型(第一部分) 自然语言处理:最大熵和对数线性模型 Natural Language Processing: Maximum Entropy and Log-linear Models 作者:Regina Barzilay(MIT,EECS Depar…

机器学习教程 之 线性模型:线性回归、对数几率回归、线性判别分析

常用的三个线性模型的原理及python实现——线性回归(Linear Regression)、对数几率回归(Logostic Regression)、线性判别分析(Linear Discriminant)。 这可能会是对线性模型介绍最全面的博客 文章目录 一、…