java字符串总结,字符串基本操作数据结构

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: