String类常用方法

字符串本质是char类型的数组,有引用地址值,==比较的是String地址,equals比较的是String地址所指向的在常量池中的具体字符串的地址(本质是char[]地址)。

具体内存机制详见《String类型内存原理》

一、获取
注意:从左往右进行查询,获取到的索引仍然是在原字符串中的索引
int length();	//返回此字符串的长度
int indexOf(int ch);	//返回指定字符在此字符串中第一次出现处的索引
int indexOf(int ch, int fromIndex);	//返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索
int indexOf(String str); //返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex); //返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(int ch); //返回指定字符在此字符串中最后一次出现处的索引
int lastIndexOf(int ch, int fromIndex); //返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索
int lastIndexOf(String str); //返回指定子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String str, int fromIndex); //返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
char charAt(int index); //返回指定索引处的 char 值
byte[] str.getBytes(); //获取字节数组,用于IO
二、判断
注意:判断包含的内容必须是连续的
boolean contains(String str); //当且仅当此字符串包含指定的字符串
boolean isEmpty(); //判断字符串是否是空字符串
boolean startsWith(String prefix); //判断字符串是否是以某个前缀开始的
boolean endsWith(String suffix); //判断字符串是否是以某个后缀结束的
boolean equals(Object anObject); //判断字符串的内容是否相等
boolean equalsIgnoreCase(String anotherString); //忽略大小写相等比较
str1 == str2; //地址值的比较
三、转换
String toUpperCase(); //全大写
String toLowerCase(); //全小写
String str = new String(char[] arr); //字符数组转字符串
Stirng str = new Stirng(char[] arr, int offset, int length);//从某位置开始截取,某一长度的元素个数作为字符串
/**
* 静态方法String直接调用方法,使其他基本类型转为字符串
*/
String.valueOf(char[] arr);
String.valueOf(char[] arr, int offset, int length);
String.valueOf(100);
String str = num + "";

/**
* 字符串转为基本类型
*/
char[] arr = str.toCharArray();
int Integer.parseInt(String str);
int Integer.parseInt(String str, int radix);//radix表示str的进制类型,输出结果为十进制
int Integer.valueOf(String str);
int Integer.valueOf(String str, int radix);
boolean Boolean.valueOf(String str);
boolean Boolean.parseBoolean(String str);
四、替换
//返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的【所有】 oldChar 得到的
String replace(char oldChar, char newChar);
//按照正则regex进行替换
String str.replaceAll(String regex, String str);
//使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串
//【注意】将要替换的字符串可以和被替换的字符串长度不相等,当做一个整体被替换掉
String replace(CharSequence target, CharSequence replacement);
五、截取
String substring(int beginIndex);//从指定位置开始到结尾,截取,返回新字符串
String substring(int beginIndex, int endIndex);//截取,要头不要尾
String trim(); //去除字符串两边的空格
六、切割、匹配和格式化
String[] arr = str.split(String regex);//按照正则切割,切掉部分不要,其他部分作为数组保留
boolean str.matches(String regex);//正则,字符串是否匹配正则
String String.format(String format, Object args...);//按照某种格式输出字符串,与printf一样
七、比较
int str1.compareTo(str2);

//源码分析
public int compareTo(String anotherString) {
	int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;
	int k = 0;
    while (k < lim) {
    	char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
        	return c1 - c2;
        }
        k++;
    }
        return len1 - len2;
}

从源码可以看出,以最短的长度为准,循环比较,当两个字符串中的某一对字符不同,做差处理,返回结果,如果长短不一,循环跳出,直接返回字符串长度差值。

八、追加
String str1.concat(str2);

追加字符串(相当于 + ),但是底层代码不同,“+”会在堆区new StringBuilder 和new String,而concat只new了String。

九、intern()方法
String str1.intern();

将str1索引的结果(字符数组,在堆中)放到常量池中,如果常量池中有对应的字符串结果,则指向常量池中已有字符串,否则,将堆中字符串的索引放到常量池,然后指向常量池中的索引。

十、String类型内存原理

String类型内存原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值