Java字符串详解的实例介绍

 更新时间:2013年04月27日 09:38:41   作者:  
本篇文章介绍了,在Java中关于字符串详解一些实例操作,需要的朋友参考下

1.创建对象

  对于java程序中的字符串直接常量,JVM会使用一个字符串池来保存它们。当第一次使用某个字符串直接常量时,JVM会将它放入字符串池中进行缓存。在一般情况下,字符串池中的字符串对象不会被垃圾回收。当程序再次需要使用该字符串时,无需重新创建一个新的字符串就可以直接让引用变量直接指向字符串中已有的字符串。而使用new操作创建的字符串对象不指向字符串池中的对象,但是可以使用intern()方法使其指向字符串池中的对象。

复制代码 代码如下:

public class StringDemo1 {
     public static void main(String[] args){
         String str1 ="abc";
         String str2 ="abc";
         String str3 =new String("abc");
         System.out.println(str1==str2);//true
         System.out.println(str1==str3);//false
         }
 }

常见问题
复制代码 代码如下:

String str3 =new String("abc");

创建了几个对象?
答:两个
复制代码 代码如下:

String str ="ab"+"cd";

创建了几个对象?

答:一个。"ab"和"cd"都是常量被放在字符串池中。因此只创建了一个abcd字符串池中并将字符串abcd保存在字符串池中。

复制代码 代码如下:

public class StringDemo1 {
    public static void main(String[] args){
        String str1 ="ab";
        String str2 ="cd";
        String str3 ="ab"+"cd";//创建对象并加入字符串池
        String str4 =str1+str2;
        String str5 =str1+"cd";
        System.out.println(str3==str4);//false
        System.out.println(str3==str5);//false

        }
}

由上面代码可知:只有引号包含文本的方式才创建的String对象才能被添加到字符串池中,对于包含new方法新建对象的”+“连接表达式他所产生的新对象不会被加到字符串池中。

但是有一种情况需要引起我们的注意:

复制代码 代码如下:

public class StringDemo1 {
    private final static String str1 ="ab";
    private final static String str2 ="cd";
    public static void main(String[] args){
        String str3 ="ab"+"cd";//创建对象并加入字符串池
        String str4 =str1+str2;
        String str5 =str1+"cd";
        System.out.println(str3==str4);//true
        System.out.println(str3==str5);//true

        }
}

这又是为什么呢?原因是这样的,对于常量来讲。它的值是固定的,因此在编译期间就能被确定了。

将上面的代码稍加改变看看会出现什么情况。

复制代码 代码如下:

public class StringDemo1 {
     private final static String str1 ;
     private final static String str2;
     static{
     str1="ab";
     str2="cd";
     }
     public static void main(String[] args){
         String str3 ="ab"+"cd";//创建对象并加入字符串池
         String str4 =str1+str2;
         String str5 =str1+"cd";
         System.out.println(str3==str4);//false
         System.out.println(str3==str5);//false

         }
 }

str1和str2虽然被定义为常量,但是她们美誉马上赋值,在运算出s的值前,她们何时被赋值,以及被赋什么值都是变数,因此性质和变量一样。只能在运行时被创建。

2.字符串方法

获取方法

•int length()
•char charAt(int index)根据位置获取某个字符
•int indexOf(int ch) 返回的是ch在字符串中第一次出现的位置
•int indexOf(int ch,int fromIndex)从fromIndex指定位置开始,获取ch在字符串中第一次出现的位置
•int indexOf(String str)
•int indexOf(String str,int fromIndex)
•int lastIndexOf(int ch)

判断方法

•boolean contains(String str) 另一种判断方法:if(str.index(str)!=-1)
•boolean startsWith(String str)
•boolean endsWith(String str)
•bolean isEmpty(String str)
•boolean equals(String str)
•boolean equalsIgnoreCase(String str);

转换方法

•将字符数组转换为字符串

构造函数

1.String(char[] chs)

2.String(char[] chs,offset,count)将字符数组中的一部分转成字符串。

静态方法

1.static String copyValueOf(char[] chs)

2.static String copyValueOf(char[] chs,int offset,int count)

3.static String valueOf(char[] )

4.static String valueOf(char[] chs,int offset,int count)

•将字符串转换成字符数组

char[] toCharArray

•将字符数组转换成字符串
•将字符串转换成字节数组
byte[] toBytes

替换方法

String replace(olderStr,newStr)

切割方法

String split(regex)

获取子串[编辑分类]

String subString(begin)

String subString(begin,end)包含头不包含尾

将字符串转换成大小写Android(10)

String toUpperCase()

String toLowerCase()

将字符串两端的空格去除

String trim()

对两个字符串进行自然顺序的比较

int compareTo(String str)

3.String 练习

1.字符串翻转

复制代码 代码如下:

public class StringDemo2 {
     public static void main(String[] args){
         String str = "avdkfasjks";
         reverseMethod_1(str);
     }
     public static void reverseMethod_1(String str){
         for(int i=str.length();i>0;i--){
             System.out.print(str.charAt(i-1));
         }
     }
 }

2.获取最大相同子串
复制代码 代码如下:

public class StringDemo2 {
    public static void main(String[] args){
        String str1 = "avdkfasjks";
        String str2 = "ewavdrtte";
        System.out.println(commonMaxSubstring(str1, str2));
    }
    public static String commonMaxSubstring(String str1,String str2){
        int len = str1.length();
        String str3 = null;
        outer:
            //i为子串的长度
            for(int i = len;i>0;i--){
                //j为子串的脚标
                for(int j=0;j<len-i+1;j++){
                    str3=str1.substring(j,j+i);
                    if(str2.contains(str3))
                        break outer;

                }
            }
        return str3;
    }
}

相关文章

  • java 字符串反转的实例详解

    java 字符串反转的实例详解

    这篇文章主要介绍了java 字符串反转的实例详解的相关资料,这里提供实现代码帮助大家学习参考这部分内容,需要的朋友可以参考下
    2017-08-08
  • G1垃圾回收器在并发场景调优详解

    G1垃圾回收器在并发场景调优详解

    这篇文章主要为大家介绍了G1垃圾回收器在并发场景调优详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 使用springboot aop来实现读写分离和事物配置

    使用springboot aop来实现读写分离和事物配置

    这篇文章主要介绍了使用springboot aop来实现读写分离和事物配置,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Spring Integration概述与怎么使用详解

    Spring Integration概述与怎么使用详解

    公司项目需要用到spring integration,而网上关于spring integration的有价值的参考资料比较少,下面这篇文章主要给大家介绍了关于Spring Integration概述与怎么使用的相关资料,需要的朋友可以参考下
    2023-02-02
  • 安装elasticsearch-analysis-ik中文分词器的步骤讲解

    安装elasticsearch-analysis-ik中文分词器的步骤讲解

    今天小编就为大家分享一篇关于安装elasticsearch-analysis-ik中文分词器的步骤讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Java中jstat命令的使用详解

    Java中jstat命令的使用详解

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量,下面这篇文章主要给大家介绍了关于Java中jstat命令使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Java中值类型和引用类型详解

    Java中值类型和引用类型详解

    大家好,本篇文章主要讲的是Java中值类型和引用类型详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Mybatis/Mybatis-Plus驼峰式命名映射的实现

    Mybatis/Mybatis-Plus驼峰式命名映射的实现

    本文主要介绍了Mybatis-Plus驼峰式命名映射的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 详解Java如何简化条件表达式

    详解Java如何简化条件表达式

    在复杂的实际业务中,往往会出现各种嵌套的条件判断逻辑。随着需求的增加,条件逻辑会变得越来越复杂。面对这种情况,简化判断逻辑就是不得不做的事情,下面为大家介绍几种方法
    2022-06-06
  • Java身份证验证方法实例详解

    Java身份证验证方法实例详解

    这篇文章主要介绍了Java身份证验证方法实例详解的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论