zoukankan      html  css  js  c++  java
  • Java学习笔记-String类

    String在Java中有着广泛的运用,Java中并没有String这种数据类型,而是通过String类来实现字符串的功能

    String概念

    String是个final类,不能被过改写
    字符串是一个特殊的对象
    字符串一旦初始化就不可以被改变

    String str1  = "abc";
    String str2 = new String("abc");
    String str3  = "abc";
    

    str1在内存中有一个对象
    str2在内存中有两个对象
    str1与str3引用同一个对象

    String类常用方法

    获取

    • 字符串中的包含的字符数,也就是字符串的长度
    int length() //获取长度
    
    • 根据位置获取位置上某个字符
    char charAt(int index) //当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException
    
    • 根据字符获取该字符在字符串中位置
    //如果没有找到,返回-1
    int indexOf(int ch) //返回的是ch在字符串中第一次出现的位置
    int indexOf(int ch, int fromIndex) //从fromIndex指定位置开始,获取ch在字符串中出现的位置
    int indexOf(String str) //返回的是str在字符串中第一次出现的位置
    int indexOf(String str, int fromIndex) //从fromIndex指定位置开始,获取str在字符串中出现的位置
    int lastIndexOf(int ch)
    

    判断

    • 字符串中是否包含某一个子串
    boolean contains(str)
    

    特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含

    if(str.indexOf("ab") != -1)
    

    而且该方法即可以判断,有可以获取出现的位置

    • 字符中是否有内容
    boolean isEmpty() ///原理就是判断长度是否为0
    
    • 字符串是否是以指定内容开头
    boolean startsWith(str)
    
    • 字符串是否是以指定内容结尾
    boolean endsWith(str)
    
    • 判断字符串内容是否相同。复写了Object类中的equals方法
    boolean equals(str)
    
    • 判断内容是否相同,并忽略大小写
    boolean equalsIgnoreCase()
    

    转换

    • 将字符数组转成字符串
      构造函数:
    String(char[])
    String(char[],offset,count) //将字符数组中的一部分转成字符串
    

    静态方法:

    static String copyValueOf(char[])
    static String copyValueOf(char[] data, int offset, int count)
    static String valueOf(char[])
    
    • 将字符串转成字符数组
    char[] toCharArray()
    
    • 将字节数组转成字符串
    String(byte[])
    String(byte[],offset,count) //将字节数组中的一部分转成字符串
    
    • 将字符串转成字节数组
    byte[] getBytes()
    
    • 将基本数据类型转成字符串
    static String valueOf(int)
    static String valueOf(double)
    

    特殊:字符串和字节数组在转换过程中,是可以指定编码表的

    替换

    • 替换字符串中的字符或字符串
    //如果要替换的字符不存在,返回的还是原串
    String replace(oldchar,newchar)
    

    切割

    • 按照一定规则分割字符串
    String[] split(regex)
    

    子串

    • 获取字符串中的一部分
    //从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常
    String substring(begin)
    //包含头,不包含尾。s.substring(0,s.length());
    String substring(begin,end)
    

    转换

    • 将字符串转成大写或则小写
    String toUpperCase()
    String toLowerCase()
    

    去除空格

    • 将字符串两端的多个空格去除
    String trim()
    

    比较

    • 对两个字符串进行自然顺序的比较
    int compareTo(string)
    

    示例(获取两个字符串中最大相同子串)

    public static String getMaxSubString(String s1,String s2) {
        String max = "", min = "";
    	max = (s1.length() > s2.length()) ? s1 : s2;
    	min = (max == s1) ? s2 : s1;
    	for(int x = 0; x < min.length(); x++) {
    		for(int y = 0, z = min.length() - x; z != min.length() + 1; y++, z++) {
                String temp = min.substring(y, z);
                if(max.contains(temp))
    				return temp;
    		}
    	}
    	return "";
    }
    

    StringBuffer类

    由于String一旦被定义就不能被修改,所以要有被定义还能被修改的字符串,就产生了StringBuffer

    StringBuffer的特点

    字符串的组成原理就是通过该类实现的
    StringBuffer可以对字符串内容进行增删
    StringBuffer是一个容器
    很多方法与String相同
    StingBuffer是可变长度的
    StringBuffer是字符串缓冲区

    特点:

    1. 长度是可变化的
    2. 可以字节操作多个数据类型
    3. 最终会通过toString方法变成字符串

    StringBuffer常用操作

    • 创建对象
    StringBuilder sb = new StringBuilder();
    StringBuilder sb = new StringBuilder("abc");
    
    • 存储
    StringBuffer append(数据) //将指定数据作为参数添加到已有数据结尾处
    StringBuffer insert(index, 数据) //可以将数据插入到指定index位置
    
    • 删除
    StringBuffer delete(start, end) //删除缓冲区中的数据,包含start,不包含end
    StringBuffer deleteCharAt(index) //删除指定位置的字符
    
    • 获取
    char charAt(int index)
    int indexOf(String str)
    int lastIndexOf(String str)
    int length()
    String substring(int start, int end)
    
    • 修改
    StringBuffer replace(start, end, string)
    void setCharAt(int index, char ch)
    
    • 反转
    StringBuffer reverse()
    
    • 将缓冲区中指定数据存储到指定字符数组中
    void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
    

    StringBuffer特有方法

    StringBuffer append(int x);
    StringBuffer delete(int start, int end );
    StringBuffer insert(int index,String str);
    StringBuffer reverse();
    

    JDK1.5出现一个StringBuilder,区别是StringBuffer是同步的,StringBuilder是非同步的
    建议使用StringBuilder

    三个因素:

    1. 提高效率
    2. 简化书写
    3. 提高安全性
  • 相关阅读:
    minixml3.1库的使用
    linux coredump及函数栈空间大小分析
    linx 设备名字来由 sd sr sg st
    gcc 遇到过的语法问题
    I帧、B帧、P帧、NALU类型
    linux grub 使用
    结构体sockadrr、sockaddr_in、in_addr的定义
    linux c log 日志接口
    关于32位/64位版本头文件的重要
    汇编指令缩写
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664851.html
Copyright © 2011-2022 走看看