String类

目录

 

String类

为什么String是不可变的?

构造器

常见Api

String反转


 

String类

引用数据类型

不可变的字符序列

底层是一个byte字节数组构成的,且是有final修饰的

为什么String是不可变的?

我看过源代码,String底层是一个byte字节数组构成的,并且是被final修饰的,因为数组一旦创建长度不可变,并且是被final修饰的引用 一旦指向某个对象后不可再指向其他对象,所以Srring是不可变的;

构造器

String(什么都能放);

还可以通过静态方法产生String对象:String.valueOf(什么都能放);

或者直接:String str = "ronglin";

常见Api

 charAt(int index):

       给定字符的索引下标,返回该下标对应的字符 底层实现:就是返回字节数组对应的index的字符

compareTo(String anotherString):

         比较两个字符串大小,a.compareTo(b)返回正数表示a大,返回负数b大,返回0相等 找出两个字符串最小的长度,然后依次遍历 ,找到第一个不相同的字符,用他们的ASCII码相减

         2、如果遍历完了都没找到一个不相同的字符,就返回两个长度之差

compareToIgnoreCase(String str):

          忽略大小写的compareTo 转成大写或小写 再比较

concat(String str):字符串拼接

                     实现:先创建 新数组 ,将原数据数据拷贝到新数据 再将拼接字符串拷贝新数组,返回以新数组构建String对象

contains(CharSequence s): a.contains(b) a中是否包含b

                    实现:调用indexOf

contentEquals(CharSequence cs);不区分大小写来进行比较

copyValueOf(char[] data): 给定一个数组,将这个数组给你包装一个String对象出来

copyValueOf(char[] data, int offset, int count):拷贝

endsWith(String suffix):是不是以suffix结尾的

startsWith(String prefix) :是不是以prefix开头的

equals(Object anObject):两字符是否相等

equalsIgnoreCase(String anotherString):两字符是否相等,不区分大小写

format(String format, Object... args) getBytes():把字符串转成字节数组

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串的srcBegin到srcEnd之间的字符到到dst数组中的dstBegin位置

indexOf(int ch):

                       查找字符在字符串中所在的位置,不存在返回-1

                        实现:遍历,找到就返回该位置

isBlank():是否为空 空格 ""都是空

isEmpty():空格不为空

join(CharSequence delimiter, CharSequence... elements):字符串使用分割符进行连接

lastIndexOf(int ch):查找 length():长度 repeat(int count):将字符串重复多少次(从后向前遍历)

replace(char oldChar, char newChar):替换

replaceAll(String regex, String replacement) split(String regex):按分隔符进行分割

strip():去掉前后空格

stripLeading():去前面空格

stripTrailing():去后面空格

substring(int beginIndex):截取

toCharArray():把字符串转成字符数组

toLowerCase():转小写

toString();

toUpperCase()

trim() :去掉前后空格

valueOf(boolean b):将其他基本类型转换为String

Object【】split(String str);以是str进行分隔放进数组;

String反转

**
 * 反转字符串
 * @author ronglin
 * @version 1.0
 * @crate_time 2021/5/7 21:33
 */
public class Reverse {
    @Test
    public void test(){
        String str="ronglin";
        //调用方法反转
        String revrese = revrese(str);
        //输出反转后的结果
        System.out.println(revrese);
    }
    /**
     * 字符串反转
     * @param str 要反转的字符串
     * @return
     */
    public static String revrese(String str){
        //将字符串转换成字节数组
        byte[] val = str.getBytes();
        //数组的最后一个元素的下标
        int n = val.length - 1;
            for (int j = (n-1) >> 1; j >= 0; j--) {
                //最后一个元素和第一个元素交换,依次循环交换位置
                int k = n - j;
                byte cj = val[j];
                val[j] = val[k];
                val[k] = cj;
            }
            //将byte数组转换成String返回
            return new String(val);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值