String

String类是字符串,Java中所有字符串文字都被实现为此类的实例,也就是说,Java中所有带双引号的字符串都是String类的对象

特点:

1.字符串的值不可变,它们在创建后不可被改变;

2.虽然它们的值不可变,但是它们可以被共享;

3.字符串效果上相当于字符数组(char[]),但是它们实际上却是字节数组(byte[]1);

String构造方法

public String()  创建一个空白字符串,不含任何内容;

public String(char[] chs)  根据字符数组,来创建字符串对象

public String(byte[] bys)  根据字节数组,来创建字符串对象

String s="abc";  直接赋值的方式来创建对象,内容就是abc;

public class StringDemo {
    public static void main(String[] args) {
        String s1=new String();
        System.out.println("s1:"+s1);
//        s1:
        char[] chs= {'a','b','c'};
        String s2= new  String(chs);
        System.out.println("s2:"+s2);
//        s2:abc
        byte[] bys={97,98,99};
        String s3=new String(bys);
        System.out.println("s3:"+s3);
//        s3:abc
        String s4="abc";
        System.out.println("s4:"+s4);
//        s4:abc
    }
}

public String() public String(byte[] bytes)

public String(byte[] bytes,int offset,int length)

public String(char[] value)

public String(char[] value,int offset,int count)

public String(String original)

package com.one;

public class StringDemo {
    public static void main(String[] args) {
        //public String()
        String s = new String();
        System.out.println(s); //String类中重写toString()方法
        //查看字符串的长度
//        字符串s的长度为:0
        //public int length()返回此字符串的长度。
        System.out.println("字符串s的长度为:" + s.length()); //如果字符串中没有字符,返回0

        System.out.println("=====================================================");
        //public String(byte[] bytes)  //根据一个字节数组创建出一个字符串对象
        byte[] bytes = {97, 98, 99, 100, 101};
        String s2 = new String(bytes);
        System.out.println("s2: " + s2);
        System.out.println("字符串s2的长度为:" + s2.length());
//s2: abcde
//字符串s2的长度为:5
        System.out.println("=====================================================");
        //public String(byte[] bytes,int index,int length)
        //将字节数组中的一部分转化成字符串
        String s3 = new String(bytes, 1, 3);
        System.out.println("s3: " + s3);
        System.out.println("字符串s3的长度为:" + s3.length());
//s3: bcd
//字符串s3的长度为:3
        System.out.println("=====================================================");
        //public String(char[] value)
        //将字符数组转成一个字符串
        char[] c = {'a', 'b', 'c', 'd','我', '爱', '冯', '提', '莫'};
        String s4 = new String(c);
        System.out.println("s4: " + s4);
        System.out.println("字符串s4的长度为:" + s4.length());
//s4: abcd我爱冯提莫
//字符串s4的长度为:9
        System.out.println("=====================================================");
        //public String(char[] value,int index,int length)
        //将字符数组的一部分转成字符串
        String s5 = new String(c, 4, 4);
        System.out.println("s5: " + s5);
        System.out.println("字符串s5的长度为:" + s5.length());
//s4: 我爱冯提莫
//字符串s4的长度为:5
        System.out.println("=====================================================");
        //StringIndexOutOfBoundsException
//       String s6 = new String(c,4,10);
//        System.out.println("s6: "+s6);
//        System.out.println("字符串s5的长度为:" + s6.length());

        System.out.println("=====================================================");
        //public String(String original)
        String s7 = "你好";
        String s8 = new String(s7);
        System.out.println("s8: " + s8);
        System.out.println("字符串s8的长度为:" + s8.length());
//s8: 你好
//字符串s8的长度为:2

    }
}

看程序写结果:

public class StringDemo4 {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1==s2);  // false
        System.out.println(s1.equals(s2)); // true

        String s3 = new String("hello");
        String s4 = "hello";
        System.out.println(s3==s4);// false
        System.out.println(s3.equals(s4)); // true

        String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5==s6); // true
        System.out.println(s5.equals(s6)); // true
    }
}

1、字符串如果变量相加,是先在常量池中开辟空间,然后做拼接;

2、字符串如果是常量相加,是先相加,然后再去常量池中去寻找,如果找到了就返回,如果没有找到,就开辟新的空间,存储拼接后的值。

public class StringDemo5 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        String s4 = "hello"+"world";
        System.out.println(s3==s4); // true
        String s5 = s1+s2;
        System.out.println(s3==s5); // false
        System.out.println(s3==(s1+s2)); // false
        System.out.println(s3.equals(s1+s2)); // true
    }
}

String的判断功能:

boolean equals(Object obj)

boolean equalsIgnoreCase(String str)

boolean contains(String str)

boolean startsWith(String str)

boolean endsWith(String str)

boolean isEmpty()

package com.one;

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(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println("********************************");
        //boolean equalsIgnoreCase(String str)比较字符串中的内容是否相同,忽略大小写
        System.out.println(s1.equalsIgnoreCase(s2));
        System.out.println(s1.equalsIgnoreCase(s3));
        System.out.println("********************************");
        //boolean contains(String str)
        //判断大的字符串中是否包含小的字符串,如果包含,返回true,反之返回false
        //区分大小写
        System.out.println(s1.contains("Hello")); //false
        System.out.println(s1.contains("hel"));
        System.out.println(s1.contains("owo"));
        System.out.println("********************************");
        //boolean startsWith(String str)
        //测试此字符串是否以指定字符串开头
        //区分大小写
        System.out.println(s1.startsWith("hel"));
        System.out.println(s1.startsWith("Hel")); // false
        System.out.println(s1.startsWith("hell34")); // false
        System.out.println("********************************");
        //boolean endsWith(String str)
        //测试此字符串是否以指定字符串结尾
        //区分大小写
        System.out.println(s1.endsWith("rld"));
        System.out.println(s1.endsWith("rlD"));
        System.out.println("********************************");
        //boolean isEmpty()
        //判断字符串是否是空字符串
        System.out.println(s1.isEmpty());
        System.out.println("********************************");
        String s4 = "";
        String s5 = null;
        System.out.println(s4 == s5);
        System.out.println(s5 == s4);
        System.out.println(s4.equals(s5)); //false
//        System.out.println(s5.equals(s4)); // NullPointerException

        /**
         *      注意:今后在做字符串比较内容的时候,很容易出现NullPointerException空指针异常
         *      前面调用方法的变量有可能是null值
         *      所以今后,为了避免出现这样的问题,如果是变量1.equals(变量2)的时候,在做equals之前判断一下变量1是不是null
         *      如果是一个变量1与字符串常量1做equals比较的时候,把字符串常量1放在前面调用方法,因为我们说过单独一个字符串也是一个String对象
         *
         */

        //需求:比较s6的值是否和s7的值一样
        String s6 = null;
        String s7 = "hello";
        if (s6 != null) {
            if (s6.equals(s7)) {
                System.out.println("是一样的");
            }
        } else {
            System.out.println("s6是null值");
        }

        //需求2:判断s6的值是否是hello
//        if(s6.equals("hello")){
//            System.out.println("是一样的");
//        }
        if ("hello".equals(s6)) {
            System.out.println("是一样的");
        } else {
            System.out.println("s6的值不是hello");
        }
    }
}

String的获取功能:

int length()

char charAt(int index)

int indexOf(int ch)

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)

package com.one;

public class StringDemo {

    public static void main(String[] args) {
        String s = "helloworld";

        //int length() 获取字符串的长度
        System.out.println("字符串s的长度为:"+s.length());
        System.out.println("==================================");
        //char charAt(int index) 返回指定索引处的字符
        //0<=index<=length()-1
        System.out.println(s.charAt(4));
        System.out.println(s.charAt(0));
        //StringIndexOutOfBoundsException
//        System.out.println(s.charAt(100));
        System.out.println(s.charAt(9));

        System.out.println("==================================");
        //public int indexOf(int ch)返回指定字符第一次出现的字符串内的索引。
        //需求:获取o在字符串中第一次出现的位置
        System.out.println(s.indexOf('o'));
        //如果此字符串中没有此类字符,则返回-1 。
        System.out.println(s.indexOf(97));

        System.out.println("==================================");
        //public int indexOf(String str)返回指定子字符串第一次出现的字符串内的索引。
        //返回的是小串的第一个字符在大串中出现的索引位置
        //owo
        System.out.println(s.indexOf("owo"));
        //如果大串中不存在小串,返回-1
        System.out.println(s.indexOf("owe"));
        System.out.println(s.indexOf("qwer"));

        System.out.println("==================================");
        // public int indexOf(int ch,int fromIndex)
        // 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。
        //如果找到了,返回的是字符在整个字符串中的索引
        System.out.println(s.indexOf("l",4)); // 8
        System.out.println(s.indexOf("l",1000)); // -1
        System.out.println(s.indexOf("p",4)); // -1
        System.out.println(s.indexOf("p",1000)); // -1

        System.out.println("==================================");
        // int indexOf(String str,int fromIndex)
        System.out.println("==================================");
        //helloworld
        //String substring(int start) 从指定位置处截取字符串,包括开始截取的位置,截取到末尾
        //如果给的索引值不存在,报错
        System.out.println(s.substring(3)); // loworld
//        System.out.println(s.substring(100)); // StringIndexOutOfBoundsException

        System.out.println("==================================");
        //String substring(int start,int end)
        //截取字符串的一部分出来
        //截取的串从start位置开始截取,截取到end-1的位置结束
        //左闭右开 [,)  含头不含尾。
        System.out.println(s.substring(5,8)); // wor
//        System.out.println(s.substring(1,20)); //StringIndexOutOfBoundsException





    }
}

String的转换功能:

byte[] getBytes()

char[] toCharArray()

static String valueOf(char[] chs)

static String valueOf(int i)

String toLowerCase()

String toUpperCase()

String concat(String str)

package com.one;

public class StringDemo {

    public static void main(String[] args) {
        String s = "HelloWorLD";

        //public byte[] getBytes()使用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中。
        //将字符串转成字节数组
        byte[] bytes = s.getBytes();
//        System.out.println(bytes);
        for(int i=0;i<bytes.length;i++){
            System.out.print(bytes[i]);
        }
        //72 101 108 108 111 87 111 114 76 68

        System.out.println();
        System.out.println("=================================");
        //char[] toCharArray()
        //将字符串转成字符数组
        char[] chars = s.toCharArray();
        for(int i=0;i<chars.length;i++){
            System.out.println(chars[i]);
        }

        //增强for循环,后面上到集合的时候,我们会讲解
//        for(char c : chars){
//            System.out.println(c);
//        }
        System.out.println("=================================");
        //static String valueOf(char[] chs)
        //将字符数组转成字符串
        String s1 = String.valueOf(chars);
        System.out.println(s1);
//HelloWorLD
        System.out.println("=================================");
        //static String valueOf(int i) 数据库
        //将int类型的数据转成字符串
        String s2 = String.valueOf(100); // 100 --> "100"
        System.out.println(s2); //100

        System.out.println("=================================");
        //String toLowerCase()
        //将字符串中的内容全部转小写
        String s3 = s.toLowerCase();
        System.out.println(s3); //helloworld

        System.out.println("=================================");
        //String toUpperCase()
        String s4 = s.toUpperCase();
        System.out.println(s4); //HELLOWORLD

        System.out.println("=================================");
        //String concat(String str)
        //将小括号中str的字符串拼接到大字符串的后面
        String s5 = s.concat("hadoop");
        System.out.println(s5);

        System.out.println("=================================");
        //public String[] split(String s)
        String s6 = "hello world hello java world";
        //需求:求出字符串中的每一个单词
        String[] strings = s6.split(" ");
        for(int i=0;i<strings.length;i++){
            System.out.println(strings[i]);
        }


    }
}

替换功能 String replace(char old,char new)

String replace(String old,String new) 去除字符串两空格    

String trim() 按字典顺序比较两个字符串

  int compareTo(String str)

int compareToIgnoreCase(String str)

public static void main(String[] args) {
        String s = "hellowrodldajavahadoopowollohelloowo";

        //String replace(char old,char new)
        //将新的字符串替换字符串中指定的所有字符,并返回一个替换后的字符串
        String s1 = s.replace('l', 'q');
        System.out.println(s);
        System.out.println(s1);

        System.out.println("====================================");
        //String replace(String old,String new)
        //将字符串中就的小串用新的小串替换,返回一个替换后的字符串
        String s2 = s.replace("owo", "===");
        System.out.println(s);
        System.out.println(s2);
        System.out.println();
        String s3 = s.replace("owo", "@@@@");
        System.out.println(s);
        System.out.println(s3);
        System.out.println();
        //如果被替换的字符串不存在会是什么情况呢?返回的是原本的字符串
        String s4 = s.replace("qwer", "LOL");
        System.out.println(s);
        System.out.println(s4);

        System.out.println("====================================");
        //String trim() 去除字符串两边的若干个空格
        String s5 = "   hello world  ";
        System.out.println(s5);
        System.out.println(s5.trim());

        System.out.println("====================================");
        //int compareTo(String str)  //比较字符串是否相同,如果相同返回0
        String s6 = "hello"; // h的ASCII码值是 104
        String s7 = "hello";
        String s8 = "abc";   // a的ASCII码值是 97
        String s9 = "qwe";   // q的ASCII码值是 113
        System.out.println(s6.compareTo(s7)); // 0
        System.out.println(s6.compareTo(s8)); // 7
        System.out.println(s6.compareTo(s9)); // -9

        String s10 = "hel";
        System.out.println(s6.compareTo(s10)); // 2



    }
}

把一串字母的首字母转换为大写,其他为小写;

public static void main(String[] args) {
        String s = "hADoopJava";
        System.out.println("转换之前:" + s);

        //将字符串中的所有字符全部转小写
        String s1 = s.toLowerCase();
        //获取第一个字符
//        char s2 = s1.charAt(0);
        String s2 = s1.substring(0, 1);
        //将第一个字符转大写
        String s3 = s2.toUpperCase();
        //获取除第一个字符以外的其他字符
        String s4 = s1.substring(1);
        //将转大写的字符与其余的字符做拼接
        String result = s3.concat(s4);
        System.out.println("转换之后:" + result);

        System.out.println("==================用链式编程转换==================");
        String result2 = s.substring(0, 1)
                .toUpperCase()
                .concat(s.substring(1).toLowerCase());
        System.out.println("转换之后:" + result2);
    }
}

把数组按指定的格式拼接成一个字符串:
int[] arr={1,2,3}    输出[1,2,3]

public static void main(String[] args) {
        int[] arr = {1,2,3};
        String s = "";
        for(int i=0;i<arr.length;i++){
            String s1 = String.valueOf(arr[i]);
            if(i==0){
                System.out.print(s.concat("[").concat(s1).concat(","));
            }else if(i==arr.length-1){
                System.out.print(s.concat(s1).concat("]"));
            }else {
                System.out.print(s.concat(s1).concat(","));
            }
        }
        System.out.println(s);


    }
}

字符反转:键盘输入“abc”,输出“cba”;

import java.util.Scanner;

public class StringTest4 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.next();
        //创建一个空的字符串
        String s1 = "";
        //将字符串转成字符数组
        char[] chars = s.toCharArray();
        //倒着遍历,得到每一个字符
        for (int i = chars.length - 1; i >= 0; i--) {
            //将每个字符转成字符串
            String s2 = String.valueOf(chars[i]);
//            System.out.println(s2);
            //将每次获取到的字符进行拼接
            s1 = s1.concat(s2);
        }

        System.out.println("倒序后的字符串为:" + s1);


    }
}

统计大串中小串中出现的次数;

举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundasdqwdeqwdwdasvgwrefasjavajavajijijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagunda”
        中java出现了5次

 */
public class StringTest5 {
    public static void main(String[] args) {
        //创建一个字符串
        String bigString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundasdqwdeqwdwdasvgwrefasjavajavajijijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagundaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagunda";

        //定义要查找的小串:java
        String minString = "java";

        //定义一个变量统计小串出现的次数
        int count = 0;

        //在大串中找到小串第一次出现的位置
        int index = bigString.indexOf(minString);

        //也有可能第一次找的时候就没有找到
        if (index == -1) {
            System.out.println("该大串中没有小串" + minString);
        } else {
            while (index != -1) {
                count++;
                //截取字符串
                int startIndex = index + minString.length();
                bigString = bigString.substring(startIndex);
                //继续去找小串出现的位置索引
                index = bigString.indexOf(minString);
                System.out.println("找到了小串,截取后的大串为:"+bigString);
            }
        }
        System.out.println("======================================================");

        System.out.println(minString + "在大串" + bigString + "中出现的次数为:" + count);


    }
}