java字符串总结,字符串基本操作数据结构
这篇文章给大家带来了一些关于java的知识,主要介绍了一些关于字符串的相关问题。字符串是零个或多个字符的有限序列,也称为字符串。下面就来看看吧,希望对你有帮助。
如何解决写爬虫IP受阻的问题?立即使用。
1.字符串基础知识
字符串是零个或多个字符的有限序列,也称为字符串。
Ken0@166.com可以从这一段的基本概念中知道:
由零个或多个字符组成:描述字符串的内部元素类型是字符。Limited:描述字符串的内容长度是有限的,小于一个最大范围,但实际长度在此范围内是不确定的。Sequence:表示字符串中相邻的字符有前继关系。Java中没有内置的字符串类型,每个用双引号括起来的字符串都是Java中String类的一个实例。
Ken0@166.com是指Java中的string不是数据类型,Java中的所有String都是String的实例化。
Java中的String
也就是说,Java程序中所有的双引号字符串都是String类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
Java中String最重要的特性是:
一个类是不可变的,所以一旦你创建了一个字符串对象,它的值就不能改变。我们称这个特性为字符串的不变性。
无可变性:当您重新分配一个字符串时,旧值不会在内存中被销毁,但会创建一个新空间来存储新值。
Ken0@166.com意味着一旦一个字符串对象在内存中被创建,它将是不可变的。在所有String类中,方法不会更改String对象本身,而是重新创建一个新的String对象。
例如:
String s= dcmString s=ddccmm 当s的值改变时,ddccmm的值并不覆盖dcm,只是重新开发一个新的空间来存储ddccmm然后将s指向它。
如果我们在实际开发中用大量字符修改一个字符串,会在内存中产生大量未释放的字符串对象,造成内存垃圾。
由于String对象的不变性,如果需要修改、添加或删除大量字符,尽量不要使用String对象,因为这样会频繁创建新的对象,导致程序的执行效率降低。
这时候我们可以在Java中使用另一个string类StringBuilder。
当我们做练习时,我们通常使用String类,但是考虑到我们有时使用StringBuilder类,这里我将稍微详细地解释一下StringBuilder类。
2.StringBuilder类
2.1 StringBuilder类常用的方法
可以看出,构建StringBuilder的对象只能通过其构造方法来构造,不像String可以通过String s=123 直接创建
因为StringBuilder类对象是可变的,所以当我们需要对字符串进行更多更改时,它通常被定义为StringBuilder类。
2.2 String和StringBuilder的区别
对象字符串是不可变的。每次使用string类中的一个方法,都要在内存中创建一个新的String对象,所以需要为这个新对象分配新的空间。
StringBuilder对象是一个动态对象,允许扩展它封装的字符串中的字符数,但是您可以指定它可以容纳的最大字符数的值。当修改StringBuilder时,它不会为自己重新分配空间,直到达到它的容量。当达到容量时,将自动分配新空间,容量将翻倍。也就是说,当一个字符串被改变时,当前对象的状态被更新。
您可以使用一个重载的构造函数来指定StringBuilder类的容量。
2.3 String类与StringBuilder类的相互转换
String类转换为StringBuilder类
公共类字符串{
公共静态void main(String[] args){
String s= baibai
StringBuilder s1=新的StringBuilder;
system . out . println(S1);
}}StringBuilder类转换为String类
公共类字符串{
公共静态void main(String[] args){
StringBuilder S1=new StringBuilder();
//连续连接
s1.append(abc )。追加( EFG );
string s=S1 . tostring();
system . out . println(s);
}}
3.初始化String类
3.1初始化String对象的两种方法:
//方法一:直接创建
S1=‘才华横溢,令人敬畏’;
//方法2:对象创建
字符串s2=新字符串(辉煌和真棒);
String S3=new String();//也可以创建空字符串。虽然这两种方法看起来一样,但本质上是不同的。
string创建的string存储在公共池中,而new创建的String对象在堆上。存储在公共池(常量池)和堆中有什么区别?
我们来举个例子:
S1=‘才华横溢,令人敬畏’;//直接创建的字符串
S2=‘才华横溢,令人敬畏’;//直接创建的字符串
字符串s3=s1//相同的引用
弦乐s4=新弦乐(‘高明牛逼’);//字符串对象创建
弦s5=新弦(高明牛逼);//字符串对象创建
system . out . println(system . identity hashcode(S1));
system . out . println(system . identity hashcode(S2));
system . out . println(system . identity hashcode(S3));
system . out . println(system . identity hashcode(S4));
system . out . println(system . identity hashcode(S5));输出:
可以看出,前三个字符串的地址是相同的,而后两个字符串是不同的!
这是因为在直接创建一个字符串时,我们会先找出公共池中是否有这样的字符串,如果有,我们会直接将引用指向它,而不是开发一个新的空间。这里,s1、s2和s3指的是公共池中的同一个内存。
在创建一个对象的时候,每次都会在堆上打开一个新的空间来存放字符串,也就是说s4和s5指向堆上两块不同的内存,但是这两块内存存放的是相同的东西。
4.String类常用API
这里再次说明,我们在做题的时候遇到与字符串相关的问题,几乎都会使用String类来解决问题,只是在大量字符串发生变化的时候,我们可能会临时使用StringBuilder类。
就目前而言,我们通常要在更改字符串后将字符串转换为字符串类。
所以我们要学的API主要是字符串API。对应我的StringBuilder的API,我们只需要学习上面提到的两个。
String 类在 java.lang 包下,所以使用的时候不需要导包!
4.1基本数据类型被转换成字符串
有三种方式:
String类中已经提供了将基本数据类型转换为字符串的静态方法,即重载参数String.valueOf()的方法:
String.valueOf(布尔值b)
//将布尔变量B转换为字符串
字符串值(字符c)
//将字符变量C转换为字符串
String.valueOf(char[] data)
//将字符数组数据转换为字符串
String.valueOf(char[]数据,整数偏移量,整数计数)
//将char数组数据中的count元素从data[offset]转换为字符串。
String.valueOf(双d)
//将双精度变量D转换为字符串
String.valueOf(float f)
//将浮点变量f转换为字符串
String.valueOf(int i)
//将int变量I转换为字符串
String.valueOf(long l)
//将长变量L转换为字符串
String.valueOf(对象对象)
//将obj对象转换为字符串,等于obj.toString()。因为是静态方法,所以不需要实例化。
4.2字符串到基本数据类型的转换
把一个字符串转换成基本数据类型,大部分都需要使用基本数据类型的打包类别。例如,byte.parse byte (Strings)可用于将字符串转换为字节。
Byte.parseByte(字符串s)
//将s转换为字节
Byte.parseByte(字符串s,int radix)
//根据基数将s转换为字节
Double.parseDouble(字符串s)
//将s转换为double
Float.parseFloat(字符串s)
//将s转换为浮点型
Integer.parseInt(字符串s)
//将s转换为int
Long.parseLong(字符串s)
//将s转换为long。注意这也是一个静态方法,但是都是对应包装类的静态方法。
4.3使用length()获取字符串中的字符数
int len=string . length();4.4使用toCharArray()将字符串转换为字符数组。
char[]arr=string . tochararray();4.5判断两个字符串的内容是否相等,返回true/false。
string 1 . equals(string 2);//区分大小写
string 1 . equalsignorecase(string 2);//不区分大小写的4.6位置相关字符串
CharAt(int)//获取指定下标位置对应的字符
index(string)//获取指定内容第一次出现的下标
lasdexof(String)//根据指定内容获取指定内容最后一次出现的下标4.7 split(String (string)并返回一个字符串数组。
String s=wa,dcm,nb!;
String[] str=s.split(,);//return str[1]=DCM 4.8 contains(String)在结果中判断一个字符串是否包含指定的内容,返回true/false。
A=string1.contains (string2) 4.9使用substring()截取一个字符串并返回一个子字符串。
String.substring(int)//从指定的下标到字符串末尾截断
String.substring(int,int)//从下标x截取到元素4.10对应下标y-1的字符串大小写转换
String.toUpperCase()
//将字符串转换为全大写
String.toLowerCase()//将一个字符串全部转换成小写4.11使用replace()替换字符串内容。
String.replace(字符串,字符串)
//用指定的内容替换所有内容。
String.replaceAll(String,String)
//用指定内容替换所有内容,支持正则化。
String . replacefirst(String,String)
//用指定的内容替换第一次出现的东西
5.字符串进阶练习
387。字符串中的第一个唯一字符
解决方案:
将字符串的单个字符转换成对应的数组下标,遍历字符串得到26个分别出现多次的字母。然后,在遍历字符串以查看哪个字符第一次出现1之后,输出相应的下标。
类别解决方案{
public int first uniqchar(String s){
int len=s . length();
int[]vis=new int[26];
int temp=-1;
for(int I=0;我leni ) {
vis[s . charat(I)- a ];
}
for(int I=0;我leni ) {
if(vis[s.charAt(i) - a]==1) {
返回I;
}
}
return-1;
}}或者我们可以先把字符串转换成字符数组来解决问题。原理是一样的!
类别解决方案{
public int first uniqchar(String s){
int[]arr=new int[26];
char[]chars=s . tochararray();
for(int I=0;i chars.lengthi ) {
arr[chars[I]- a ];
}
for(int I=0;i chars.lengthi ) {
if (arr[chars[i] - a]==1) {
返回I;
}
}
return-1;
}}推荐学习:《java视频教程》以上是快速使用Java数据结构的字符串详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。