关于java:Java零基础系列教程08Java字符串

34次阅读

共计 11666 个字符,预计需要花费 30 分钟才能阅读完成。

配套视频教程

本文 B 站配套视频教程

String 类位于 java.lang 包中,具备丰盛的办法

字符串的初始化办法

/*
 * 字符串:就是由多个字符组成的一串数据。也能够看成是一个字符数组。* 通过查看 API,咱们能够晓得
 *         A: 字符串字面值 "abc" 也能够看成是一个字符串对象。*         B: 字符串是常量,一旦被赋值,就不能被扭转。* 
 * 初始化办法:*         public String():
 *        public String(String original): 把字符串常量值转成字符串
 *
 * 字符串的办法:*         public int length():返回此字符串的长度。*/
public class StringDemo {public static void main(String[] args) {// public String():
        String s1 = new String();
        System.out.println("s1:" + s1);
        System.out.println("s1.length():" + s1.length());
        System.out.println("--------------------------");
        //s1:
        //s1.length():0

      //public String(String original): 把字符串常量值转成字符串
        String s6 = new String("abcde");
        System.out.println("s6:" + s6);
        System.out.println("s6.length():" + s6.length());
        System.out.println("--------------------------");
        
        // 字符串字面值 "abc" 也能够看成是一个字符串对象。String s7 = "abcde";
        System.out.println("s7:"+s7);
        System.out.println("s7.length():"+s7.length());
    }
}

字符串的特点:一旦被赋值,就不能扭转。
然而援用能够扭转.

public class StringDemo {public static void main(String[] args) {
        String s = "hello";
        s += "world";
        System.out.println("s:" + s); // helloworld
    }
}

String s = new String(“hello”) 和 String s =“hello”; 的区别?
String 字面值对象和构造方法创建对象的区别

/*
 * String s = new String(“hello”) 和 String s =“hello”; 的区别?
 * 有。前者会创立 2 个对象,后者创立 1 个对象。* 
 * ==: 比拟援用类型比拟的是地址值是否雷同
 * equals: 比拟援用类型默认也是比拟地址值是否雷同,而 String 类重写了 equals() 办法,比拟的是内容是否雷同。*/
public class StringDemo2 {public static void main(String[] args) {String s1 = new String("hello");
        String s2 = "hello";

        System.out.println(s1 == s2);// false
        System.out.println(s1.equals(s2));// true
    }
}

 String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5 == s6);// 字符串字面量,间接从内存找,所以 true
        System.out.println(s5.equals(s6));// true

String 类的判断性能:

/*
 * String 类的判断性能:* boolean equals(Object obj): 比拟字符串的内容是否雷同, 辨别大小写
 * boolean equalsIgnoreCase(String str): 比拟字符串的内容是否雷同, 疏忽大小写
 * boolean contains(String str): 判断大字符串中是否蕴含小字符串
 * boolean startsWith(String str): 判断字符串是否以某个指定的字符串结尾
 * boolean endsWith(String str): 判断字符串是否以某个指定的字符串结尾
 * boolean isEmpty(): 判断字符串是否为空。* 
 * 留神:*         字符串内容为空和字符串对象为空。*         String s = "";// 对象存在,所以能够调办法
 *         String s = null;// 对象不存在,不能调办法
 */
public class StringDemo {public static void main(String[] args) {
        // 创立字符串对象
        String s1 = "helloworld";
        String s2 = "helloworld";
        String s3 = "HelloWorld";

        // boolean equals(Object obj): 比拟字符串的内容是否雷同, 辨别大小写
        System.out.println("equals:" + s1.equals(s2));
        System.out.println("equals:" + s1.equals(s3));
        System.out.println("-----------------------");

        // boolean equalsIgnoreCase(String str): 比拟字符串的内容是否雷同, 疏忽大小写
        System.out.println("equals:" + s1.equalsIgnoreCase(s2));
        System.out.println("equals:" + s1.equalsIgnoreCase(s3));
        System.out.println("-----------------------");

        // boolean contains(String str): 判断大字符串中是否蕴含小字符串
        System.out.println("contains:" + s1.contains("hello"));
        System.out.println("contains:" + s1.contains("hw"));
        System.out.println("-----------------------");

        // boolean startsWith(String str): 判断字符串是否以某个指定的字符串结尾
        System.out.println("startsWith:" + s1.startsWith("h"));
        System.out.println("startsWith:" + s1.startsWith("hello"));
        System.out.println("startsWith:" + s1.startsWith("world"));
        System.out.println("-----------------------");

        // 练习:boolean endsWith(String str): 判断字符串是否以某个指定的字符串结尾这个本人玩

        // boolean isEmpty(): 判断字符串是否为空。System.out.println("isEmpty:" + s1.isEmpty());

        String s4 = "";
        String s5 = null;
        System.out.println("isEmpty:" + s4.isEmpty());
        // NullPointerException
        // s5 对象都不存在,所以不能调用办法,空指针异样
//        System.out.println("isEmpty:" + s5.isEmpty());
        
    }
}

String 类的获取性能



/*
 * String 类的获取性能
 * int length(): 获取字符串的长度。* char charAt(int index): 获取指定索引地位的字符
 * int indexOf(int ch): 返回指定字符在此字符串中第一次呈现处的索引。*         为什么这里是 int 类型,而不是 char 类型?
 *         起因是:'a' 和 97 其实都能够代表 'a'。如果外面写 char, 就不能写数字 97 了
 * int indexOf(String str): 返回指定字符串在此字符串中第一次呈现处的索引。* int indexOf(int ch,int fromIndex): 返回指定字符在此字符串中从指定地位后第一次呈现处的索引。* int indexOf(String str,int fromIndex): 返回指定字符串在此字符串中从指定地位后第一次呈现处的索引。* String substring(int start): 从指定地位开始截取字符串, 默认到开端。* String substring(int start,int end): 从指定地位开始到指定地位完结截取字符串。*/
public class StringDemo {public static void main(String[] args) {
        // 定义一个字符串对象
        String s = "helloworld";

        // int length(): 获取字符串的长度。System.out.println("s.length:" + s.length());//10
        System.out.println("----------------------");

        // char charAt(int index): 获取指定索引地位的字符
        System.out.println("charAt:" + s.charAt(7));//
        System.out.println("----------------------");

        // int indexOf(int ch): 返回指定字符在此字符串中第一次呈现处的索引。System.out.println("indexOf:" + s.indexOf('l'));
        System.out.println("----------------------");

        // int indexOf(String str): 返回指定字符串在此字符串中第一次呈现处的索引。System.out.println("indexOf:" + s.indexOf("owo"));
        System.out.println("----------------------");

        // int indexOf(int ch,int fromIndex): 返回指定字符在此字符串中从指定地位后第一次呈现处的索引。System.out.println("indexOf:" + s.indexOf('l', 4));
        System.out.println("indexOf:" + s.indexOf('k', 4)); // -1
        System.out.println("indexOf:" + s.indexOf('l', 40)); // -1
        System.out.println("----------------------");

        // 本人练习:int indexOf(String str,int
        // fromIndex): 返回指定字符串在此字符串中从指定地位后第一次呈现处的索引。// String substring(int start): 从指定地位开始截取字符串, 默认到开端。蕴含 start 这个索引
        System.out.println("substring:" + s.substring(5));
        System.out.println("substring:" + s.substring(0));
        System.out.println("----------------------");

        // String substring(int start,intend): 从指定地位开始到指定地位完结截取字符串。// 包含 start 索引然而不包 end 索引
        System.out.println("substring:" + s.substring(3, 8));
        System.out.println("substring:" + s.substring(0, s.length()));
    }
}

依据身份证号解析出世日

字符串遍历:



/*
 * 需要:遍历获取字符串中的每一个字符
 * 
 * 剖析:*         A: 如何可能拿到每一个字符呢?
 *             char charAt(int index)
 *         B: 我怎么晓得字符到底有多少个呢?
 *             int length()
 */
public class StringTest {public static void main(String[] args) {
        // 定义字符串
        String s = "helloworld";
        for (int x = 0; x < s.length(); x++) {System.out.println(s.charAt(x));
        }
    }
}

统计大写字母,小写字母,数字在字符串中的个数



/*
 * 需要:统计一个字符串中大写字母字符,小写字母字符,数字字符呈现的次数。(不思考其余字符)
 * 举例:*         "Hello123World"
 * 后果:*         大写字符:2 个
 *         小写字符:8 个
 *         数字字符:3 个
 * 
 * 剖析:*         前提:字符串要存在
 *         A: 定义三个统计变量
 *             bigCount=0
 *             smallCount=0
 *             numberCount=0
 *         B: 遍历字符串,失去每一个字符。*             length() 和 charAt() 联合
 *         C: 判断该字符到底是属于那种类型的
 *             大:bigCount++
 *             小:smallCount++
 *             数字:numberCount++
 * 
 *             这道题目的难点就是如何判断某个字符是大的,还是小的,还是数字的。*             ASCII 码表:*                 0    48
 *                 A    65
 *                 a    97
 *             尽管,咱们依照数字的这种比拟是能够的,然而想多了,有比这还简略的
 *                 char ch = s.charAt(x);
 * 
 *                 if(ch>='0' && ch<='9') numberCount++
 *                 if(ch>='a' && ch<='z') smallCount++
 *                 if(ch>='A' && ch<='Z') bigCount++
 *        D: 输入后果。*
 * 练习:把给定字符串的形式,改良为键盘录入字符串的形式。*/
public class StringTest2 {public static void main(String[] args) {
        // 定义一个字符串
        String s = "Hello123World";
        
        // 定义三个统计变量
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;
        
        // 遍历字符串,失去每一个字符。for(int x=0; x<s.length(); x++){char ch = s.charAt(x);
            
            // 判断该字符到底是属于那种类型的,char 类型会转成 int 类型
            if(ch>='a' && ch<='z'){smallCount++;}else if(ch>='A' && ch<='Z'){bigCount++;}else if(ch>='0' && ch<='9'){numberCount++;}
        }
        
        // 输入后果。System.out.println("大写字母"+bigCount+"个");
        System.out.println("小写字母"+smallCount+"个");
        System.out.println("数字"+numberCount+"个");
    }
}

String 的转换性能:



/*
 * String 的转换性能:* byte[] getBytes(): 把字符串转换为字节数组。* char[] toCharArray(): 把字符串转换为字符数组。* static String valueOf(char[] chs): 把字符数组转成字符串。* static String valueOf(int i): 把 int 类型的数据转成字符串。*         留神:String 类的 valueOf 办法能够把任意类型的数据转成字符串。* String toLowerCase(): 把字符串转成小写。* String toUpperCase(): 把字符串转成大写。* String concat(String str): 把字符串拼接。*/
public class StringDemo {public static void main(String[] args) {
        // 定义一个字符串对象
        String s = "JavaSE";

        // byte[] getBytes(): 把字符串转换为字节数组。byte[] bys = s.getBytes();
        for (int x = 0; x < bys.length; x++) {System.out.println(bys[x]);
        }
        System.out.println("----------------");

        // char[] toCharArray(): 把字符串转换为字符数组。char[] chs = s.toCharArray();
        for (int x = 0; x < chs.length; x++) {System.out.println(chs[x]);
        }
        System.out.println("----------------");

        // static String valueOf(char[] chs): 把字符数组转成字符串。String ss = String.valueOf(chs);
        System.out.println(ss);
        System.out.println("----------------");

        // static String valueOf(int i): 把 int 类型的数据转成字符串。int i = 100;
        String sss = String.valueOf(i);
        System.out.println(sss);
        System.out.println("----------------");

        // String toLowerCase(): 把字符串转成小写。System.out.println("toLowerCase:" + s.toLowerCase());
        System.out.println("s:" + s);
        // System.out.println("----------------");
        // String toUpperCase(): 把字符串转成大写。System.out.println("toUpperCase:" + s.toUpperCase());
        System.out.println("----------------");

        // String concat(String str): 把字符串拼接。String s1 = "hello";
        String s2 = "world";
        String s3 = s1 + s2;
        String s4 = s1.concat(s2);
        System.out.println("s3:"+s3);
        System.out.println("s4:"+s4);
    }
}

把一个字符串的首字母转成大写,其余为小写。(只思考英文大小写字母字符)



/*
 * 需要:把一个字符串的首字母转成大写,其余为小写。(只思考英文大小写字母字符)
 * 举例:*         helloWORLD
 * 后果:*         Helloworld
 * 
 * 剖析:*         A: 先获取第一个字符
 *         B: 获取除了第一个字符以外的字符
 *         C: 把 A 转成大写
 *         D: 把 B 转成小写
 *         E:C 拼接 D
 */
public class StringTest {public static void main(String[] args) {
        // 定义一个字符串
        String s = "helloWORLD";

        // 先获取第一个字符
        String s1 = s.substring(0, 1);
        // 获取除了第一个字符以外的字符
        String s2 = s.substring(1);
        // 把 A 转成大写
        String s3 = s1.toUpperCase();
        // 把 B 转成小写
        String s4 = s2.toLowerCase();
        // C 拼接 D
        String s5 = s3.concat(s4);
        System.out.println(s5);

        // 优化后的代码
        // 链式编程
        String result = s.substring(0, 1).toUpperCase()
                .concat(s.substring(1).toLowerCase());
        System.out.println(result);
    }
}

String 类的其余性能:

替换性能:
去除字符串两空格
按字典程序比拟两个字符串

//        去除字符串两端空格

        String name = "ni hao";
        System.out.println(name.trim());
        System.out.println(name.trim().length());
        System.out.println(name);
        System.out.println(name.length());
//        替换性能:String str2 ="hello world hello kitty";
        String strNew = str2.replace("hello","hehe");
        System.out.println(strNew);
        String strNewName = name.replace("","");
        System.out.println(strNewName);
//        按字典程序比拟两个字符串
          String s1 = "Lisi";
          String s2 = "lisi";

          System.out.println(s1.compareTo(s2));
          if(s1.compareToIgnoreCase(s2) > 0)
          {System.out.println("da");
          }
          else
          {System.out.println("小");
          }


/*
 * 需要:把数组中的数据依照指定个格局拼接成一个字符串
 * 举例:*         int[] arr = {1,2,3};    
 * 输入后果:*        "[1, 2, 3]"
 * 剖析:*         A: 定义一个字符串对象,只不过内容为空
 *         B: 先把字符串拼接一个 "["
 *         C: 遍历 int 数组,失去每一个元素
 *         D: 先判断该元素是否为最初一个
 *             是:就间接拼接元素和 "]"
 *             不是:就拼接元素和逗号以及空格
 *         E: 输入拼接后的字符串
 * 
 * 把代码用性能实现。*/
public class StringTest2 {public static void main(String[] args) {
        // 前提是数组曾经存在
        int[] arr = { 1, 2, 3};

        // 写一个性能,实现后果
        String result = arrayToString(arr);
        System.out.println("最终后果是:" + result);
    }

    /*
     * 两个明确:返回值类型:String 参数列表:int[] arr
     */
    public static String arrayToString(int[] arr) {
        // 定义一个字符串
        String s = "";

        // 先把字符串拼接一个 "["
        s += "[";

        // 遍历 int 数组,失去每一个元素
        for (int x = 0; x < arr.length; x++) {
            // 先判断该元素是否为最初一个
            if (x == arr.length - 1) {// 就间接拼接元素和 "]"
                s += arr[x];
                s += "]";
            } else {
                // 就拼接元素和逗号以及空格
                s += arr[x];
                s += ",";
            }
        }

        return s;
    }
}

字符串反转



import java.util.Scanner;

/*
 * 字符串反转
 * 举例:键盘录入”abc”* 输入后果:”cba”* 
 * 剖析:*         A: 键盘录入一个字符串
 *         B: 定义一个新字符串
 *         C: 倒着遍历字符串,失去每一个字符
 *             a:length() 和 charAt() 联合
 *             b: 把字符串转成字符数组
 *         D: 用新字符串把每一个字符拼接起来
 *         E: 输入新串
 */
public class StringTest3 {public static void main(String[] args) {
        // 键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输出一个字符串:");
        String line = sc.nextLine();

        String s = myReverse(line);
        System.out.println("实现性能后的后果是:" + s);
    }

    /*
     * 两个明确:返回值类型:String 参数列表:String
     */
    public static String myReverse(String s) {
        // 定义一个新字符串
        String result = "";

        // 把字符串转成字符数组
        char[] chs = s.toCharArray();

        // 倒着遍历字符串,失去每一个字符
        for (int x = chs.length - 1; x >= 0; x--) {
            // 用新字符串把每一个字符拼接起来
            result += chs[x];
        }
        return result;
    }
}

字符串拆分

有一段歌词,每句都以空格“”结尾,请将歌词每句按行输入

String 类提供了 split() 办法,将一个字符串宰割为子字符串,后果作为字符串数组返回

public class Lyric {public static void main(String[] args) {
            String words="长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山";
            String[] printword=new String[100];        
               System.out.println("*** 原歌词格局 ***\n"+words);
            System.out.println("\n*** 拆分后歌词格局 ***");
            printword=words.split(" "); 
            for(int i=0;i<printword.length;i++){System.out.println( printword[i] );
            }
        }
}

统计大串中小串呈现的次数



/*
 * 统计大串中小串呈现的次数
 * 举例:*         在字符串 "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"
 * 后果:*         java 呈现了 5 次
 * 
 * 剖析:*         前提:是曾经晓得了大串和小串。* 
 *         A: 定义一个统计变量,初始化值是 0
 *         B: 先在大串中查找一次小串第一次呈现的地位
 *             a: 索引是 -1,阐明不存在了,就返回统计变量
 *             b: 索引不是 -1,阐明存在,统计变量 ++
 *         C: 把方才的索引 + 小串的长度作为开始地位截取上一次的大串,返回一个新的字符串,并把该字符串的值从新赋值给大串
 *         D: 回到 B
 */
public class StringTest5 {public static void main(String[] args) {
        // 定义大串
        String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
        // 定义小串
        String minString = "java";

        // 写性能实现
        int count = getCount(maxString, minString);
        System.out.println("Java 在大串中呈现了:" + count + "次");
    }

    /*
     * 两个明确:返回值类型:int 参数列表:两个字符串
     */
    public static int getCount(String maxString, String minString) {
        // 定义一个统计变量,初始化值是 0
        int count = 0;        
        int index;
        // 先查,赋值,判断
        while((index=maxString.indexOf(minString))!=-1){
            count++;
            maxString = maxString.substring(index + minString.length());
        }

        return count;
    }
}

解法 2

  // 定义大串
        String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
        // 定义小串
        String minString = "java";
        String[] array = maxString.split(minString);
         System.out.println("Java 在大串中呈现了:" + (array.length -1) + "次");

StringBuffer 和 StringBuilder

对字符串频繁批改(如字符串连贯)时,应用 StringBuffer 类能够大大提高程序执行效率

StringBuffer 申明
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer(“aaa”);
StringBuffer 的应用
sb.toString(); // 转化为 String 类型
sb.append(“aaa”); // 追加字符串

将一个数字字符串转换成逗号分隔的数字串,即从左边开始每三个数字用逗号分隔

正文完
 0