zoukankan      html  css  js  c++  java
  • java字符串

    字符串不是java主要的数据类型,而是java标准库中的一个String类。每一个用双引號引起来的字符串就是String类的一个实例。如:String name="Tonny"

    1.字符串的构造

    第一种方式:

    String name="Tonny"

    另外一种方式:

    String name=new String("Tonny");

    第三种方式:

     byte[] arr = {65, 66, 67, 68};
     String s = new String(arr); //s=ABCD

    第四种方式:

    byte[] arr = {65, 66, 67, 68,69};
    String s = new String(arr, 1, 4); //s=BCDE

    2.子串

    使用substring能够从一个较大的字符串中提取一个子串。比方:

     String greeting="HelloWorld!";
     System.out.println(greeting.substring(2));//llo World!
     System.out.println(greeting.subSequence(2, 6));//lloW 

    substring() 接受一个參数时,參数为子串開始位置,字符串从0開始计算位置。
    substring()接收2个參数时分别为開始位置和结束位置,截取的字符串包括開始位置不包括结束位置。

    3.拼接

    使用”+”能够拼接2个字符串。

    比如。

     String str1="Hello";
     String str2="World!";
     String str3=str1+str2;
     System.out.println(str3);//HelloWorld

    一个字符串和和一个非字符串进行拼接时,后者被转换为字符串类型。在java中不论什么一个字符串对象都能够转换为字符串。

    4. 不可变字符

    java中没有改动字符串的方法,java使用拼接再赋值的方式来实现字符串的改动。原来的字符串仍然存在,仅仅是变量指向了新的字符串而已。

    hello永远是包括h、e、l、l、o的代码单元序列。

    5.检查字符串是否相等

    这个问题常常出如今各种笔试、面试题中。

    字符串的equals方法用来检查2个字符串的值是否相等,==比較的是2个字符串的地址是否同样,即是否指向的是同一个字符串。

    使用substring、+截取或者拼接的字符串尽管内容一样,可是地址不一样。

     String a="ucas";
     String b=a.substring(0,3)+"s";
     System.out.println("ucas".equals(a));//true
     System.out.println(a.equals(b)); //true
     System.out.println(a==b);  //false

    6.空串与Null串

    空串是一个String 对象,内容为空。长度为0。

    null表示没有对象和它关联。

    推断一个字符串对象是不是为空串:

    if(str.length==0)
    或者
    if(str.equals(""))

    检查一个对象既不为null也不为空:

    if(str!=null&&str.length!=0)

    7.字符串Api

    • boolean endwith()推断字符串后缀
    • equalIgnoreCase()忽略大写和小写比較
    • int indexOf() 子串首次出现位置
    • int lastIndexOf() 返回字符串最后一次出现位置
    • int length() 返回字符串长度
    • boolean startWith(prefix)推断字符串是否以prefix开头
    • String toLowerCase 转为小写
    • String toUpperCase 转为大写
    • String trim()删除尾部空格

    8.字符串的本质

    地址比較:
    字符串”abc”在常量池中,s1和s2指向的是同一个对象,因此不论是比較地址还是比較值结果都是一样的。

      String s1 = "abc";
      String s2 = "abc";
      System.out.println(s1 == s2);  //true
      System.out.println(s1.equals(s2));  //true

    再看以下的样例:

       String s1 = "abc";
       String s2 = new String("abc");
       System.out.println(s1 == s2);        //false
       System.out.println(s1.equals(s2));   //true

    这时,s1指向的是字符串常量池中的”abc”。s2是字符串对象,位于堆内存中,因此s1和s2的地址不一样,不是同一个对象,字符串值一样。

    9 字符串切分

     String str1 = "abc,def,hig";
     String[] strArr = str1.split(",");
     for(String str:strArr){
        System.out.println(str);
     }

    打印结果:

    abc
    def
    hig

    特殊的字符须要转义,比方,.本身是正則表達式中的占位符,使用转成英文实心句号:

    String str1 = "abc.def.hig";
    String[] strArr = str1.split("\.");

    10.字符串转字符数组

     String s = "ab你好";
     char[] cArr = s.toCharArray();
     for (char c : cArr) {
         System.out.println(c);
     }

    打印结果:

    a
    b
    你
    好

    11.字符串按字典顺序排序

    使用TreeSet:

    String[] strArr = {"recursive", "raw", "platform", "rank", "register", "symbol"};
    
    TreeSet treeSet = new TreeSet<>();
    
    for (String str : strArr) {
        treeSet.add(str);
    }
    
    System.out.println(treeSet);

    12.按字典顺序逆序排序

    逆序排序仅仅须要在TreeSet实现Comparator接口,重写compare()方法:

    String[] strArr = {"recursive", "raw", "platform", "rank", "register", "symbol"};
    
    TreeSet treeSet = new TreeSet<>(new Comparator() {
       @Override
       public int compare(Object o1, Object o2) {
         return o2.toString().compareTo(o1.toString());
                }
       });
       for (String str : strArr) {
            treeSet.add(str);
       }
       System.out.println(treeSet);

    结果:

    [symbol, register, recursive, raw, rank, platform]

    13.StringBuffer和StringBuilder

    StringBuffer是字符串缓冲区, 线程安全,单线程操作单时候也要不停的推断锁,后来独立出来一个StringBuilder,线程不安全。可是速度快。

  • 相关阅读:
    线段树 hdu3255 Farming
    3.CCFadeOutTRTiles,部落格效果,跳动的方块特效,3D瓷砖晃动特效,破碎的3D瓷砖特效,瓷砖洗牌特效,分多行消失特效,分多列消失特效
    分析:新建短信,当我们接受人RecipientsEditor中输入+86的时候,系统会自己主动在+86后增加空格
    【POJ3377】Ferry Lanes 最短路
    Please ensure that adb is correctly located at &#39;D:Androidandroid-sdkplatform-toolsadb.exe&#39; and
    Objective-C
    分布式高维空间近邻搜索项目开发
    我的改进版2048(2)
    github关联域名,创建个人站点教程终结篇
    数据结构(6)二叉树
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7402599.html
Copyright © 2011-2022 走看看