java字符串常用的方法总结

java常见方法函数的实例,

1、字符串比较compareTo、compareToIgnoreCase
2、字符串查找indexOf、lastIndexOf
3、删除字符串
4、字符串替代replace、replaceAll
5、字符串反转reverse
6、字符串转变大小写toUpperCase、toLowerCase
7、去掉首位空格trim
8、是否包含某字符/字符串contains
9、返回指定位置字符charAt

代码及运行结果如下:

public static void main(String args[]){
    String str1 = "Hello World";
    String str2 = "Hello World";
    String str3 = "hello world";
    String str4 = " hello world ";
    //字符串比较字符串比较compareTo(返回的是int),0相等,负数小于,正数大于
    System.out.println("r1 : " + str1.compareTo(str2)); // 0
    
    //字符串比较字符串比较compareTo(返回的是int),0相等,负数小于,正数大于
    System.out.println("r2 : " + str1.compareTo(str3));//-32
    
    //字符串比较compareToIgnoreCase,忽略大小写。0相等,负数小于,正数大于
    System.out.println("r3 : " + str1.compareToIgnoreCase(str3));//0
    
    //字符串查找indexOf,返回的是找到的第一个的位置,没找到返回-1。从0开始
    System.out.println("r4 : " + str1.indexOf("o"));//4
    
    //查找字符串最后一次出现的位置lastIndexOf
    System.out.println("r5 : " + str1.lastIndexOf("o"));//7
    
    //删除字符串中的一个字符,字符串从0开始的 substring(a, b)返回指定起始位置(含)到结束位置(不含)之间的字符串
    System.out.println("r6 : " + str1.substring(0, 5) + str1.substring(6));
    
    //字符串替换,替换所有,注意是替换所有
    System.out.println("r7 : " + str1.replace("o", "h"));//hellh whrld
    
    //字符串替换,替换所有
    System.out.println("r8 : " + str1.replaceAll("o", "h"));//
    
    //字符串替换,替换第一个
    System.out.println("r9 : " + str1.replaceFirst("o", "h"));
    
    //字符串反转
    System.out.println("r10 : " + new StringBuffer(str1).reverse());
    
    //字符串分割
    String [] temp = str1.split("\\ ");
    for (String str : temp){
        System.out.println("r11 : " + str);
    }
    
    //字符串转大写
    System.out.println("r12 : " + str1.toUpperCase());
    
    //字符串转小写
    System.out.println("r13 : " + str1.toLowerCase());
    
    //去掉首尾空格
    System.out.println("r14 : " + str4.trim());
    
    //是否包含,大小写区分
    System.out.println("r15 : " + str1.contains("World"));
    
    //返回指定位置字符
    System.out.println("r16 : " + str1.charAt(4));
}

在这里插入图片描述

原理解释:

1、关于compare和compareTo的比较,其实是比较字符的ASC码,从第一个字母开始比较,相同就继续,不同就返回结果,大于返回1,小于返回0.
注意如果是位数不同情况 如 world 和worda只会返回-1 或者1两种情况,如果是截止到某位不同,例如world和wordf,则会是d的ASC码减去f的ASC码,此时的话值是-2。

2、一定不要使用==运算符检测两个字符串是否相等!这个运算符只能确定两个字符串是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,它们必然相等。但内容相同的多个字符串完全有可能被拷贝放置在不同的位置上。

  如果虚拟机始终将相同的字符串共享,就可以使用运算符检测字符串是否相等。但实际上只有字符串常量才是共享的,而通过+号拼接产生或者substring等操作产生的字符串并不是共享的。因此使用比较字符串是不可靠的,相当于在程序中埋下一颗炸弹,是不是产生令人头疼的BUG。
可以使用equals()方法检测两个字符串是否相等。
如果想要忽略大小写的区别,可以使用equalsIgnoreCase()方法。

3、JAVA中替换字符的方法replace和replaceAll 区别
都是替换所有,但是区别在于

1.replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
2.replaceAll的参数是regex或者char,即基于规则表达式的替换,比如,可以通过replaceAll("\d", “*”)把一个字符串所有的数字字符都换成星号;

4、字符串对象不可改变
在Java中,String对象是不可变的(Immutable)。在代码中,可以创建多个某一个String对象的别名。但是这些别名都是的引用是相同的。
比如s1和s2都是”droidyue.com”对象的别名,别名保存着到真实对象的引用。所以s1 = s2

String s1 = "droidyue.com";
String s2 = s1;
System.out.println("s1 and s2 has the same reference =" + (s1 == s2));

5、Java中仅有的重载运算符
在Java中,唯一被重载的运算符就是字符串的拼接相关的。+,+=。除此之外,Java设计者不允许重载其他的运算符。

6、了解了上面两点,可能会有这样的思考,既然Sting对象不可变,那么多个(三个及以上)字符串拼接必然产生多余的中间String对象。

String userName = "Andy";
String age = "24";
String job = "Developer";
String info = userName + age + job;

 要得到上面的info,就会userName和age拼接生成临时一个String对象t1,内容为Andy24,然后有t1和job拼接生成最终我们需要的info对象,这其中,产生了一个中间的t1,而且t1创建之后,没有主动回收,势必会占一定的空间。如果是一个很多(假设上百个,多见于对对象的toString的调用)字符串的拼接,那么代价就更大了,性能一下会降低很多。
 真的会有上面的性能代价么,字符串拼接这么常用,没有特殊的处理优化么,答案是有的,这个优化进行在编译器编译.java到bytecode时。

 一个Java程序如果想运行起来,需要经过两个时期,编译时和运行时。在编译时,Java 编译器(Compiler)将java文件转换成字节码。在运行时,Java虚拟机(JVM)运行编译时生成的字节码。通过这样两个时期,Java做到了所谓的一处编译,处处运行。
 当Java编译器遇到字符串拼接的时候,会创建一个StringBuilder对象,后面的拼接,实际上是调用StringBuilder对象的append方法。这样就不会有我们上面担心的问题了。
 如果是在循环体中,为了避免性能降低,最好不要在循环体中使用字符串拼接,而是在循环体外定义stringbuffer,再在循环体中使用append方法,这样就避免了重复定义stringbuffer的情况。

7、提到了字符串常量池的概念,有独立的一篇文章,还请移步

部分引用于 :
https://blog.csdn.net/zeng_ll/article/details/86984145
https://droidyue.com/blog/2014/08/30/java-details-string-concatenation/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值