首页 > 其他分享 >String

String

时间:2024-11-02 20:57:25浏览次数:3  
标签:字符 转换 String 某个 字符串 比较

string是字符串类型同时也是一个类

String  , StringBuffer  ,StringBuilter的区别

String是不可修改的,后两者是可以被修改的

StringBuffer和StringBuilter的大部分功能是相似的

StringBuffer采用的是同步处理,属于多线程安全操作,  而StringBuilter未采用同步处理,属于线程不安全操作

 

string这个类final修饰的,是不可以被继承的,同时它实现了很多个接口

 

String有三种书写语法,同时String是可以直接打印输出的,因为它本身就重写了toString方法

 

在String中length()是计算字符串长度的,且它是一个方法

 而没有括号的length是计算数组的长度的

 isEmpty()是判断所指的对象是否为空

 而我们所指的对象如果是null,在使用isempty去判断就会报空指针异常,因为null是不指向任何的对象

 

 

String比较

分为4种方法

1.==(比较两个值的地址是否相同)

2.equals(比较两个值是否相同)

3. compareTo(比较长度)

4.compareToIgnoreCase(忽略大小写比较)

 

这里的判断是判断他们两个的地址是不是一样的

 如果想要比较里面的值是否相同就要使用equals来进行比较,但是这里的equals不是object里面的那个

 因为object是所有类的父类,而String作为子类它重写了equals方法

 

这里的比较结果是相等的,因为这种直接赋值的比较是“字符串的常量池”,什么意思呢,就是在堆中会有一个常量池,里面存的就是双引号引起来的字符串的常量值,

常量池里面会先看里面有没有存在当前的字符串,没有的话就会存进去,有的话就获取这个字符串在常量池当中的地址

 

 

字符串比较大小

字符串比较大小是用compareTo来比较的,同时String也是重写了compareTo方法的,

在String里面比较大小逻辑:

长度相同的情况下,第一个不一样的字符的大小就是整个字符串的大小,比较的是字符的ASCII码值

两个字符串长度不一样,会先比较两个长度的差值,在这个差值范围内,有不一样的字符就能比较出大小,若都是一样的就看谁长谁就大

 

 

compareToIgnoreCase是不分大小写比较

 

 

字符串的查找

charAt是查找某个下标的字符

 indexOf是找某个字符的下标,也可以从某个位置开始找某个字符,是从前往后找

 

 lastIndexOf是从后往前找字符,也可以规定从哪个位置开始找

 

 字符串转化

valueOf可以把任何数据结构转换成字符串的形式输出,底层逻辑都是重写了toString方法,也可以把对象转化成字符串

 字符串也可以转换成数字

只需要把要转化的类型的包装类调用parse加上要转换的类型就可以实现转换

 大小写转换

是通过toUpperCase把字符串转换为大写,但是这里的转换并不是在原来的字符串上转换,而是产生了一个新的对象

 toLowerCase是把字符串中的全部的大写字母转换为小写,

 字符串转换数组

 使用toCharArray来进行转换

 

字符串格式化

使用format来进行格式化转换

 

字符串的转换

replace/replaceAll 把所有要转换的字符全部替换成要替换的字符

replaceFrist 把从头到尾第一个出现的字符替换

都不是在原有的字符串替换,而是变更成为一个新的对象

 

 

字符串的拆分

使用split来进行拆分,从某个字符进行拆分,返回值是String数组,也可以进行多次分割中间写上|进行隔开即可,也可以在后面实现要分隔的次数

如果要使用这几个符号进行分隔(. * \ +) 都要加上转义字符(\\)

 

 

字符串的截取

使用substring通过某个下标获取到某个字符,也可以通过区间截取,区间截取都是左闭右开

 

 trim把字符左右的空格去除,中间的空格去除不了

 

 

字符串的不可变性

为什么说不可变呢,

因为我们的string的原码里是有一个value和hash,而我们的string内部的value这个数组是被private修饰的,它只可以在当前类当中使用

 

字符串的修改

stringBuilber和stringBuffer的方法都是一样的

区别在于

在于你使用的是多线程还是单线程,多线程就使用StringBuffer,两者的内部功能基本都是一样的

在一个字符串的后面添加新的东西,通常我们都是直接写成这种赋值的方式,且string是不可变的这时候就需要产生一个新的对象来进行添加另一个对象,效率就会非常的慢,且它返回的是一个新的对象

若直接使用stringBuilber.append来进行尾部追加效率就会变得很快,因为它只会产生一个对象,然后在这个对象后面添加你想添加的东西,返回的是当前对象的引用

 

setCharAt获取到某个下标的字符将其替换成别的字符

 insert在某个下标位置插入一个新的字符串

 delete和deletecharat从某个下标/某个区间开始删除字符

 

reverse反转字符串,把当前字符串全部反过来,且不会产生新的对象也不需要返回值

 stringBuilder和stringbuffer要转换成string类型时需要通过调用tostring来进行

 

标签:字符,转换,String,某个,字符串,比较
From: https://www.cnblogs.com/hzy7/p/18518133

相关文章

  • JavaScript语法基础(函数,对象,常用类Array,String,Math和Date)
    JavaScript函数语法:function functionname(){    //执行代码}functioncalculator(a,b){c=a+b;//alert("a+b="+c);returnc;}console.log(c)</script><inputty......
  • String学习总结
    定义与初始化字面量定义:可以直接使用双引号来定义一个字符串,例如Stringstr="Hello";。这种方式创建的字符串对象存储在字符串常量池中。如果多个字符串字面量相同,它们会指向字符串常量池中的同一个对象,以节省内存。使用new关键字定义:也可以通过new关键字来创建字符串对象,如......
  • 哈希算法(闭散列) - 线性探测 / 二次探测(缺支持string数据插入)
    一.哈希初步1.哈希的思想哈希算法的思想是将要存储的顺序按照一定规律进行存储,查询时也依据此规律进行查询相对于string字符串,会选择开辟一个大小为26的数组,将字母(仅小写)按照Ascall码表进行映射,统计其出现的次数相对于没有规律的数据而言,常采用取模的方法(%数组大小),......
  • 【C++】string 类模拟实现:深入探索字符串操作原理
     快来参与讨论......
  • Java 传参时,如何做到两个 String 实参的实际值交换_3
    ###Java传参时,如何做到两个String实参的实际值交换在Java中,所有的参数传递都是值传递,这意味着方法接收的是实参值的一个副本。对于基本数据类型,这个副本是实际值;对于对象,副本是引用的一个拷贝。因此,直接在方法内部交换两个`String`实参的实际值是不可能的。然而,可以通过一......
  • String、StringBuffer和StringBuilder的区别
    String、StringBuffer和StringBuilder的区别  下面从可变性、是否线程安全等方面来对String、StringBuffer、StringBuilder进行比较。  一、可变性  1.String  String类中使用final关键字修饰字符数组来保存字符串。publicfinalclassStringimplementsja......
  • string类的深度剖析1
    文章目录1.前置语法知识——auto和范围for1.1auto关键字1.2范围for2.string类2.1为什么要学string类2.2认识string类2.3string类的常用接口说明2.3.1常见构造2.3.2容量操作2.3.3访问及遍历操作2.3.4修改操作2.3.5非成员函数3.结尾1.前置语法知识——au......
  • C++(std::to_string())
    目录1.函数定义2.示例代码3.内部实现机制4.注意事项5.应用场景6.使用std::ostringstream控制精度的示例7.总结std::to_string()是C++11引入的一个标准库函数,用于将基本数据类型(如整数、浮点数等)转换为对应的字符串格式。这个函数属于<string>头文件,因此使用时需......
  • c++ string 识别标志位并解析标志位后面的字符
    解析字符串中的固定标志位正则表达式和iterator的配合应用#include<string>#include<map>#include<regex>#include<iostream>//替换\\M+后面的字符//\\M+195B6替换为文std::regexpattern(R"(\\M+[^\\M]*)");//匹配\\M+后跟任意非\\M的字符(0次或多次)......
  • 管中窥豹----从String Intern中观察.NET Core到.NET 8 托管堆的变迁
    简介https://www.cnblogs.com/lmy5215006/p/18494483在研究.NETString底层结构时,我所观察到的情况与《.NETCore底层入门》,《.NET内存管理宝典》书中描述不符。故多研究了一下。发现.NET托管堆的结构也是越来越多,越来越高性能。 //示例代码internalclassProgram{......