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. 提高安全性
  • 相关阅读:
    CS224n, lec 10, NMT & Seq2Seq Attn
    CS231n笔记 Lecture 11, Detection and Segmentation
    CS231n笔记 Lecture 10, Recurrent Neural Networks
    CS231n笔记 Lecture 9, CNN Architectures
    CS231n笔记 Lecture 8, Deep Learning Software
    CS231n笔记 Lecture 7, Training Neural Networks, Part 2
    pytorch坑点排雷
    Sorry, Ubuntu 17.10 has experienced an internal error
    VSCode配置python插件
    tmux配置与使用
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664852.html
Copyright © 2011-2022 走看看