关于String类及String类常用的方法(初学者也能看懂,非常详细,含例题解析,leetcode解决查找字符串数组中的最长公共前缀问题)

14 篇文章 1 订阅
9 篇文章 0 订阅

一、String类的构造方法

由于String类的构造方法太多,我挑几个常用的构造方法在这进行讲解,有些构造方法只是数据类型不同,作用类似。如果某个方法我每讲到,你可以借助看源码进行理解。

1.String(String)

此构造方法的作用是将字符串数据封装成字符串对象。

public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }

 2.String(char[])

此构造方法的作用是将字符数组的数据封装成字符串对象。

public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }

3.String(char[], int, int)

此构造方法的作用是将字符数组中的一部分数据封装成字符串对象。

//offset表示开始下标,count表示封装char数组元素的数量
public String(char value[], int offset, int count) {
        if (offset < 0) {
            throw new StringIndexOutOfBoundsException(offset);
        }
        if (count <= 0) {
            if (count < 0) {
                throw new StringIndexOutOfBoundsException(count);
            }
            if (offset <= value.length) {
                this.value = "".value;
                return;
            }
        }
        // Note: offset or count might be near -1>>>1.
        if (offset > value.length - count) {
            throw new StringIndexOutOfBoundsException(offset + count);
        }
        this.value = Arrays.copyOfRange(value, offset, offset+count);
    }

二、String的获取方法

1.length()

作用:获取字符串的长度。

String str = "Hello,java";
System.out.println(str.length());//10  标点符号也算一个字符

2.charAt(int index)

作用:获取指定索引处的字符。

String str = "Hello,java";
System.out.println(str.charAt(4));//o  下标从0开始,所以到4为o

3.indexOf(String str)

作用:获取str在字符串对象中第一次出现的索引。

String str = "Hello,java";
System.out.println(str.indexOf("l"));//2  第一个l的下标为2

4.indexOf(String str, int fromIndex)

作用:获取str在字符串对象中fromIndex开始往后第一次出现的索引。

String str = "Hello,javall";
System.out.println(str.indexOf("l",3));//3  下标3开始往后第一个l的下标就是3

5.lastIndexOf(String str)

作用:获取str在字符串对象中最后一次出现的索引。

String str = "Hello,javall";
System.out.println(str.lastIndexOf("l"));//11

6.lastIndexOf(String str, int fromIndex)

作用:获取str在字符串对象中fromIndex开始往前第一次出现的索引。

String str = "Hello,javall";
System.out.println(str.lastIndexOf("l",6));//3

7.substring(int start)

作用:从start开始截取字符串(含start下标的值)。

String str = "Hello,javall";
System.out.println(str.substring(4));//o,javall

8.substring(int start,int end)

作用:从start开始截取字符串到end结束(含start下标的值,但是不含end下标的值)。

String str = "Hello,javall";
System.out.println(str.substring(4,7));//o,j

三、String判断功能

1.equals(Object obj)

作用:比较字符串的内容是否相同。

String str = "adsfaxsdfas";
System.out.println(str.equals("adsfaxsdfas"));//true
System.out.println(str.equals("adsf"));//false

2.equalsIgnoreCase(String anotherString)

作用:比较字符串的内容是否相同,忽略大小写。

String str = "adsfaxsdfas";
System.out.println(str.equalsIgnoreCase("ADsfaxsdfAs"));//true

3.startsWith(String prefix)

作用:判断字符串对象是否以指定的字符开头(区分大小写)。

String str = "adsfaxsdfas";
System.out.println(str.startsWith("a"));//true
System.out.println(str.startsWith("A"));//false

4.startsWith(String prefix,int toffset)

作用:判断字符串对象是否以指定的字符开头,参数toffset为指定从哪个下标开始。

String str = "adsfaxsdfas";
System.out.println(str.startsWith("f", 3));//true
System.out.println(str.startsWith("f", 4));//false

5.endsWith(String str)

作用:判断字符串对象是否以指定的字符结尾。

String str = "adsfaxsdfas";
System.out.println(str.endsWith("s"));//true

6.isEmpty()

作用:判断指定字符串是否为空。

String str = "adsfaxsdfas";
System.out.println(str.isEmpty());//false

四、String类中的转化方法

1.toCharArray()

作用:把字符串转换为字符数组。

String str = "adsfaxsdfas";
char[] array = str.toCharArray();
System.out.println(Arrays.toString(array));//[a, d, s, f, a, x, s, d, f, a, s]

2.toLowerCase()

作用:把字符串转换为小写字符串。

String str = "ABCDEFG";
System.out.println(str.toLowerCase());//abcdefg

3.toUpperCase()

作用:把字符串转换为大写字符串。

String str = "abcdefg";
System.out.println(str.toUpperCase());//ABCDEFG

五、其他方法

1.trim()

作用:去除字符串两端空格。

String str = "  adsf,axs,dfas  ";
System.out.println(str);
System.out.println(str.trim());

结果:

 2.split()

作用:去除字符串中指定的的字符,然后返回一个新的字符串,返回值要用数组接收。

String str = "  adsf,axs,dfas  ";
String[] strs = str.split(",");
System.out.println(Arrays.toString(strs));//[  adsf, axs, dfas  ]

3.subSequence(int beginIndex,int endIndex )

作用:截取字符串中指定位置的字符组成一个新的字符串,不含endIndex下标的值。

String str = "adsfaxsdfas";
System.out.println(str.subSequence(1, 4));//dsf

4.replace(char oldChar, char newChar)

作用:将指定字符替换成另一个指定的字符

String str = "adsfaxsdfas";
System.out.println(str.replace('a', 's'));//sdsfsxsdfss

5.replaceAll(String regex,String replasement)

作用:用新的内容替换全部旧内容

String str = "Hello,world!";
System.out.println(str.replaceAll("ll", "LL"));//HeLLo,world!

6.replaceFirst(String regex,String replacement)

作用:替换首个满足条件的内容

String str = "adsfaxsdfas";
System.out.println(str.replaceFirst("a", "s"));//sdsfaxsdfas

7.contains(CharSequence s)

作用:查看字符串中是含有指定字符。

String str = "adsfaxsdfas";
System.out.println(str.contains("a"));//true

8.concat(String str)

作用:在原有的字符串的基础上加上指定字符串。

String str = "adsfaxsdfas";
System.out.println(str.concat("加的内容"));//adsfaxsdfas加的内容

六、最后分享一个用startWith()方法解决查找字符串数组中的最长公共前缀问题

/**
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * 如果不存在公共前缀,返回空字符串""。
 * 示例 1:
 * 输入:strs = ["flower","flow","flight"]
 * 输出:"fl"
 */
public class Code13 {
    public static void main(String[] args) {
        String[] strings = {"flower" , "flow" , "flight"};
        System.out.println(longestCommonPrefix(strings));
    }

    /**
     * 定义一个方法来求最长公共前缀
     * @param strings
     * @return
     */
    public static String longestCommonPrefix(String[] strings){
        //当数组为空时
        if(strings.length == 0){
            return "";
        }
        //先取数组的第一个字符串作为公共前缀
        String s = strings[0];
        //遍历数组
        for (String string : strings){
            while (!string.startsWith(s)){
                //当该字符串不以s为前缀时
                //判断该字符串是否为空
                if(string.length() == 0){
                    return "";
                }
                //截取s的前s.length()-1个字符
                s = s.substring(0,s.length()-1);
            }
        }
        return s;
    }
}

如果存在问题,欢迎一起在评论区交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲戴王冠♛必承其重

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值