Java-API-String

特点

1、字符串都是对象。
2、一旦初始化就不可以被更改。因为是常量。

//指的是"abc"不可以更改,s只是指向"abc"的对象
String s = "abc";
s = "def";

3、因为 String 对象是不可变的,所以可以共享。

        //多个引用指向同一个字符串
        //两个"itcast"是同一个对象,所以s1和s2指向同一个对象
        String s1 = "itcast";
        String s2 = "itcast";
        System.out.println(s1==s2);

      //两个内容相同,创建方式不同的字符串
      String s3 = "abc";
      String s4 = new String("abc");
        //s3和s4有什么不同呢?
        /*
         * s3创建,在内存中只有一个对象。"abc"
         * 
         * s4创建,在内存中有两个对象。"abc" s4
         */
        
        System.out.println(s3==s4);//false
//      因为String复写了equals方法,
//      建立字符串自己的判断相同的依据。通过字符串对象中的内容来判断的。
        System.out.println(s3.equals(s4));//true,

4、通过String类的构造函数可以知道,将字节数组或者字符转成字符串。

字符串查找

        /*
         * "abcde"
         * 
         * 1,字符串是一个对象,那么它的方法必然时围绕操作这个对象的数据而定义的。
         * 2,字符串中部分功能
         *  2.1 有多少个字符?
         *      int length()
         * 
         *  2.2 字符的位置。
         *      int indexOf(ch,fromIndex);
         * 
         *  2.3 获取指定位置上的字符。
         *      char charAt(int)
         * 
         *  2.4 获取部分字符串。
         *      String substring(int start,int end);
         *  
         * 
         * 
         */
        String str = "abada";
//      System.out.println("length="+str.length());
        int len = str.length();
        System.out.println("len="+len);
        
        //------a字母出现的位置------
        int index = str.indexOf('a');//获取的是a字符第一次出现的位置。
        System.out.println("index="+index);
        //------第二个a字母出现的位置------
        
        int index1 = str.indexOf('a',index+1);
        System.out.println("index1="+index1);
        //------第三个a字母出现的位置------
        int index2 = str.indexOf('a',index1+1);
        System.out.println("index2="+index2);
        
        str = "sdfghjkl;wertyuiop[sdfghjkla;";
        int index3 = str.lastIndexOf('m');//如果要找的字符不存在,-1
        System.out.println("index3="+index3);
        
        //----------获取指定位置上字符。---------------
        str = "itcast";
        char ch = str.charAt(3);//不存在角标会发生StringIndexOutOfBoundsException
        System.out.println("ch="+ch);
        
        //------------获取部分字符串----------------------
        String s = str.substring(2, 4);//包含头,不包含尾。
        System.out.println("s="+s);
    /*
         * String方法查找练习。
         * 1,字符串是否以指定字符串开头。结尾同理。
         *      boolean startsWith(string)
         *      boolean endsWith(string)
         * 
         * 2,字符串中是否包含另一个字符串。
         *      boolean contains(string);
         *      int indexOf(string)//如果返回-1,表示不存在。
         * 
         * 3,字符串中另一个字符串出现的位置。
         *      int indexOf(string)
         * 4,将字符串中指定的字符串替换成另一个字符串。
         *      String replace(oldstring , newstring)
         * 
         * 5,字符串如何比较大小?
         * 
         * 6,将字符串转成一个字符数组。或者字节数组。
         *      toCharArray()
         *      getBytes()
         * 7,将字母字符串转成大写的字母字符串。
         *      toUpperCase()
         *      toLowerCase();
         * 8,将字符串按照指定的方式分解成多个字符串, "lisi,wangwu,zhaoliu"获取三个姓名。
         *      String[] split(string);
         * 
         */
        
        //1
        String str = "StringDemo.java";
        boolean b1 = str.startsWith("Demo");//false
        //2
        boolean b2 = str.contains("Demo");//CharSequence x = "Demo";//true
        //4
        String s = str.replace("haha", "Test");//没有被替换内容时,结果是原串儿。
        System.out.println("s="+s);
        //6
        char[] chs = str.toCharArray();
        byte[] bytes = str.getBytes();
        //7
        String upperString = str.toUpperCase();
        
        //8
        str = "lisi,wangwu,zhaoliu";
        String[] names = str.split(",");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
        
        //5,字符串如何比较大小?
        int result = "ab".compareTo("ab");//只要想让对象具备比较大小的功能只需实现Comparable接口。
        System.out.println("result:"+result);

字符串数组排序

import java.util.Arrays;

public class StringTest2_1 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 案例一:字符串数组
         * ["abc","nba","cctv","itcast"]
         * 要求从小到大排序。
         * 
         */
        String[] strs = {"abc","nba","cctv","itcast"};
        printArray(strs);
        sortString(strs);
        printArray(strs);
    }

    /**
     * 字符串数组
     * 思路:
     * 1,曾经玩过int[]排序,选择,冒泡。
     * 2,字符串排序同理。
     * 3,for嵌套循环。
     * 4,循环中进行元素的大小比较,满足条件位置置换。
     * @param strs
     */
    public static void sortString(String[] strs) {
        
        for (int i = 0; i < strs.length -1 ; i++) {
            for (int j = i + 1; j < strs.length; j++) {
                if(strs[i].compareTo(strs[j])>0){//对象比较用方法。compareTo。
                    swap(strs,i,j);
                }
            }
        }
//      Arrays.sort(strs);
        
    }
    /*
     * 数组元素位置置换。
     */
    private static void swap(String[] strs, int i, int j) {
        String temp = strs[i];
        strs[i] = strs[j];
        strs[j] = temp;
        
    }
    /*
     * 打印字符串数组。
     */
    private static void printArray(String[] strs) {
        for (int i = 0; i < strs.length; i++) {
            System.out.print(strs[i]+" ");
        }
        System.out.println();
    }
}

字符串出现的次数

public class StringTest2_2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        /*
         * 
         * 案例二:
         * "witcasteritcasttyuiitcastodfghjitcast"有几个itcast
         * 
         * 思路:
         * 1,无非就是在一个字符串中查找另一个字符串。indexOf。
         * 2,查找到第一次出现的指定字符串后,如何查找第二个呢?
         * 3,无需在从头开始,只要从第一次出现的位置+要找的字符串的长度的位置开始向后查找下一个第一次出现的位置即可。
         * 4,当返回的位置是-1时,查找结束。
         */
        String str = "witcasteritcasttyuiitcastodfghjitcast";
        String key = "itcast";
        
        int count = getKeyCount(str,key);
        System.out.println("count="+count);
        /*
        int x = str.indexOf(key,0);//从头开始找。
        System.out.println("x="+x);
        
        int y = str.indexOf(key,x+key.length());//从指定起始位开始找。
        System.out.println("y="+y);
        
        int z = str.indexOf(key,y+key.length());//从指定起始位开始找。
        System.out.println("z="+z);
        
        int a = str.indexOf(key,z+key.length());//从指定起始位开始找。
        System.out.println("a="+a);
        
        int b = str.indexOf(key,a+key.length());//从指定起始位开始找。
        System.out.println("b="+b);
        */
    }

    /**
     * 获取key在str中出现次数。
     * @param str
     * @param key
     * @return
     */
    public static int getKeyCount(String str, String key) {
        
        //1,定义变量。记录每一次找到的key的位置。
        int index = 0;
        //2,定义变量,记录出现的次数。
        int count = 0;
        
        //3,定义循环。只要索引到的位置不是-1,继续查找。
        while((index = str.indexOf(key,index))!=-1){
            
            //每循环一次,就要明确下一次查找的起始位置。
            index = index + key.length();
            
            //每查找一次,count自增。
            count++;
        }
        return count;
    }
}

按照长度递减获取字符串

public class StringTest2_3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 
         * 
         * 案例三: "itcast_sh"要求,将该字符串按照长度由长到短打印出来。 itcast_sh itcast_s tcast_sh
         */

        String str = "itcast";
        printStringByLength(str);

    }

    public static void printStringByLength(String str) {

        // 1,通过分析,发现是for嵌套循环。
        for (int i = 0; i < str.length(); i++) {

            for (int start = 0, end = str.length() - i; end <= str.length(); start++, end++) {

                //根据start,end截取字符串。
                String temp = str.substring(start, end);
                System.out.println(temp);
            }

        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,148评论 1 44
  • 1/数独姑娘 数独姑娘曾是我的舍友,我们见证了彼此刚刚踏入职场的矜持与不知所措,我们小心翼翼的在彼此的成长轨迹上行...
    木棉简兮阅读 387评论 0 0
  • 百度的解释是:敢作敢为、毫不畏惧的气概称之为勇气。 为什么想到这个词语,是因为周末得时候听了一场演讲,主题是关于勇...
    刘_小梦阅读 242评论 2 0