Taday——数组与字符串(4)

本文详细介绍了Java中的String类,包括其构造方法、不可变特性、常用方法如equals、hashCode、concat、split等,并通过示例演示了split方法的使用。此外,还对比了StringTokenizer在字符串分割中的应用,强调了两者在性能和使用上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、String类

1.所属的包是java.lang包 不用导入

2.找寻构造方法创建对象

String s1="abc";//直接将字符串常量赋值给s1;

  String ss=new String();//无参数构造方法创建空的对象;

  String s2=new String("abc");//带String参数的构造方法创建对象

·  String s2=new String(byte[] value);//将数组中的每一个元素转化成对应的char组合成String

  String s2=new String(char[] value);//将数组中的每一个char元素拼接成最终的String

  String是一个非常特殊的引用数据类型 可以像基本数据类型一样 创建 赋值

3.String类的特性

String的不可变特性;

体现在两个地方:长度及内容

长度–>final修饰的数组 数组长度本身不变 final修饰数组的地址也不变;

内容–>private修饰的属性 不能在类的外部访问

在String类中包含一个数组;

private final char[] value;//存储String中的每一个字符

final最终的不可改变的–>地址不让改变;数组的长度本身不可变;

private 私有的 当前类中才可访问–>数组中的内容也不能改变;

4.String类中常用的方法 10+

 1.boolean=equals(Object obj);//继承Object类 重写啦 比较两个字符串中的字面值是否相等;

  2.int = hashCode()//继承自Object重写啦  31*h+和;

  3.int = compareTo(String str);//实现自Compare接口 实现啦 按照字典(unicode编码)索引的顺序比较; 

   4.String = toString();//继承自Object 重写啦 不再输出@hashCode (16进制的形式);输出字符串中的字面值;



  5.char = charAt(int index);//"abc" 0--a

    //返回给定index对应位置的那个char值(字符)

  6.int = codePointAt(int index);//"abc" 0-97

    //返回给定index对应位置的那个char所对应的code码

  7.int=length();//返回字符串的长度(个数);(其实就是底层char[] value属性的长度)

    注意:区别数组length是属性 String的length()是方法  集合size()方法;

  8.String = concat(String);//将给定的字符串拼接在当前字符串之后;

    注意:方法执行完毕需要接受返回值 String的不可变特性;

       concat方法 与 ‘+’拼接的性能问题;concat方法快些;

       若是遇到频繁的拼接字符串-->通常使用StringBuilder、StringBuffer

  9.boolean=contains(CharSequence s);//判断给定的s是否在字符串中存在

  10.startsWith(String prefix);//判断此字符串是否以prefix开头;

    endsWith(string suffix);结尾

  11.byte[]=getBytes();

    char[]=toCharArray();

    将当前的字符串转化成数组

  12.int index=indexOf(int/String str [,int fromIndex]);

  //四个方法重载,找寻给定的元素在字符串中第一次出现的索引位置;若字符串不存在,则返回-1

   lastIndexOf();//找寻给定的元素在字符串中最后一次出现的索引位置 若不存在则返回-1;

  13.boolean=isEmpty();

   判断当前字符串是否为空字符串(length()是否为0);

   注意:与null的区别;

  14.replace();

    replaceAll();

   replaceFirst();

    将给定的字符串替换成另外的字符串;

  15.split(String regex [,int limit]);

    按照给定的表达式将原来的字符串拆分开的

  16.String=substring(int beginIndex [,int endIndex]);

    将当前的字符串截取一部分;

    从beginIndex开始至endIndex结束

    若endIndex不写 则默认到字符串最后

Regular有规律的 Expression表达式

正则表达式regex

一个带有一定规律的表达式

匹配字符串格式的

正则表达式通常的作用如下:

1.字符串的格式校验 String类中提供的一个方法 matches(“regex”)

2.字符串的拆分及替换 String类中提供的方法replace split

3.字符串的查找 Pattern模式 Mather匹配器

二、分割字符串

public String[] split(String regex,int limit)

示例代码

public class StringSplit {
    public static void main(String[] args) {
        String sourceStr = "1,2,3,4,5";
        String[] sourceStrArray = sourceStr.split(",");
        for (int i = 0; i < sourceStrArray.length; i++) {
            System.out.println(sourceStrArray[i]);
        }

        // 最多分割出3个字符串
        int maxSplit = 3;
        sourceStrArray = sourceStr.split(",", maxSplit);
        for (int i = 0; i < sourceStrArray.length; i++) {
            System.out.println(sourceStrArray[i]);
        }
    }
}

输出结果:

1
2
3
4
5
1
2
3,4,5

split 的实现直接调用的 matcher 类的 split 的方法。在使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。在正则表达式中有特殊的含义的字符,我们使用的时候必须进行转义,示例:

public class StringSplit {
    public static void main(String[] args) {
        String value = "192.168.128.33";
        // 注意要加\\,要不出不来,yeah
        String[] names = value.split("\\.");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
    }
}

split分隔符总结

1.字符"|","*","+“都得加上转义字符,前面加上”\"。
2.而如果是"",那么就得写成"\\"。
3.如果一个字符串中有多个分隔符,可以用"|"作为连字符。

比如:String str = “Java string-split#test”,可以用Str.split(" |-|#")把每个字符串分开。这样就把字符串分成了3个子字符串。

java.util.Tokenizer JDK 1.0 or later
StringTokenizer

StringTokenizer 类允许应用程序将字符串分解为标记。StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。

代码示例

public class StringSplit {
    public static void main(String[] args) {
        String ip = "192.168.128.33";
        StringTokenizer token=new StringTokenizer(ip,".");  
        while(token.hasMoreElements()){  
         System.out.print(token.nextToken()+"  ");  
        } 

    }
}

但是StringTokenizer对于字符串"192.168…33"的分割,返回的字符串数组只有3个元素,对于两个分隔符之间的空字符串会忽略,这个要慎重使用。

但是String.split(String.split是用正则表达式匹配,所以不使用KMP字符串匹配算法)用的都是按顺序遍历的算法,时间复杂度O(m*n),较高,所以性能上,StringTokenizer好很多,对于频繁使用字符串分割的应用,例如etl数据处理,使用StringTokenizer性能可以提高很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值