其他分享
首页 > 其他分享> > 第十三天常用类String

第十三天常用类String

作者:互联网

Scanner:

通过观察API发现,该类中的方法没有被static修饰,所以要创建对象去调用,而创建对象,我们要学习一下它的构造方法。

构造方法:

public Scanner(InputStream source)构造一个新的Scanner ,

产生从指定的输入流扫描的值。

流中的字节将使用底层平台的default charset转换为字符 。

java默认使用的编码是Unicode 万国码。

参数:InputStream source (InputStream指的是字节流类型)

简单理解为键盘录入的数据

概述:用于键盘录入数据,在程序中使用

Scanner(InputStream source)

由于该类实在java.util包下,所以将来使用的时候,需要导包。

1、获取键盘上的int类型的数据

nextInt()

2、获取字符串数据

next(): 不会接收到特殊字符

nextLine(): 会接收到特殊字符,如换行符

public class ScannerDemo {
    public static void main(String[] args) {


    Scanner sc=new Scanner(System.in);
        //键盘录入一个int类型的数据
        //public int nextInt()将输入的下一个标记扫描为int 。
        int i = sc.nextInt();
        System.out.println(i);
        //键盘录入一个字符串
        //public String next()查找并返回此扫描仪的下一个完整令牌。
        String j = sc.next();
        System.out.println(j);

        //public String nextLine()将此扫描仪推进到当前行并返回跳过的输入。
        //nextLine()可以接收一些特殊的字符,如换行符\r\n  \n   \t
        String s = sc.nextLine();
        System.out.println(s);

    }
}

String:

概述:简单理解为一个签将许多的字符串起来

字符串是由多个字符组成的一串数据(字符序列)

字符串可以看成是字符数组 ******

特点:

一旦被创建,值不能发生改变,这里的改变指的是,常量池中的字符换本身不可改变

构造方法:

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)

注意:

1、String s = new String("hello");与String s = "hello";的区别

new的时候会在堆内存中开辟空间。

2、字符串相加的时候需要注意的问题:

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

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

public class StringDemo1 {
    public static void main(String[] args) {
        //public String()
        String s = new String();
        System.out.println(s); //String类中重写toString()方法
        //查看字符串的长度
        //public int length()返回此字符串的长度。
        System.out.println("字符串s的长度为:" + s.length()); //如果字符串中没有字符,返回0
        System.out.println("==========================");
        //public String(byte[] bytes)  //根据一个字节数组创建出一个字符串对象
        byte[] bytes = {99, 98, 66, 56, 77, 41};
        String s2 = new String(bytes);
        System.out.println("s2:" + s2);
        System.out.println("字符串s2的长度为:" + s2.length());
        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());
        System.out.println("=====================================================");
        //public String(char[] value)S
        //将字符数组转成一个字符串
        char[] c = {'a', 'b', 'c', 'd', '我', '爱', '冯', '提', '莫', '呀'};
        String s4 = new String(c);
        System.out.println("s4:" + s4);
        System.out.println("字符串s4的长度为:" + s4.length());
        System.out.println("=====================================================");
        //public String(char[] value,int index,int length)
        //将字符数组的一部分转成字符串
        String s5 = new String(c, 1, 5);
        System.out.println("s5:" + s5);
        System.out.println("字符串s5的长度为:" + s5.length());
        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());
    }
}

字符串是常量,它的值在创建后不能被改变

String s = "hello";

s += "world";

请问s的值是什么?

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

String s = new String(“hello”)和String s = “hello”;的区别?

字符串比较之看程序写结果

字符串拼接之看程序写结果

注意事项:

1、==比较引用数据类型的时候,比较的时候地址值

2、String类中使用equals方法比较的是字符串的值,因为String类中重写了equals方法

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

看程序写结果

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

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

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

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);
        String s5=s1+s2;
        System.out.println(s3==s5);
        System.out.println(s3==(s1+s2));
        System.out.println(s3.equals(s1+s2));
    }
}

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 StringDemo6 {
    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"));
        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"));
        System.out.println(s1.startsWith("hel34"));
        System.out.println("=============================");
        //boolean endsWith(String str)
        //测试此字符串是否以指定字符串结尾
        //区分大小写
        System.out.println(s1.endsWith("rld"));
        System.out.println(s1.endsWith("rlD"));
        System.out.println("=============================");
        //boolean isEmpty()
        //判断字符串是否是空字符串
        String s4="";
        String s5=null;
        System.out.println(s4==s5);
        System.out.println(s5==s4);
        System.out.println(s4.equals(s5));
        //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 ("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)

/*
        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)
 */

public class StringDemo7 {
    public static void main(String[] args) {
        String s="helloworld";
        //int length() 获取字符串的长度
        System.out.println("字符串的长度为:"+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));
       // System.out.println(s.charAt(100));//StringIndexOutOfBoundsException报错
        System.out.println(s.charAt(9));
        System.out.println("===========================");
        //public int indexOf(int ch)返回指定字符第一次出现的字符串内的索引。
        //需求:获取o在字符串中第一次出现的位置
        System.out.println(s.indexOf('o'));
        System.out.println(s.indexOf(97));
        //如果此字符串中没有此类字符,则返回-1 。
        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("i",4));
        System.out.println(s.indexOf("i",1000));
        System.out.println(s.indexOf("i",4));
        System.out.println(s.indexOf("i",1000));

        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)

public String[] split(String regex) **********

import java.nio.charset.StandardCharsets;
import java.util.Locale;

/*String类的转换功能:
//           byte[] getBytes()
//           char[] toCharArray()
//static String valueOf(char[] chs)
//static String valueOf(int i)
//        String toLowerCase()
//        String toUpperCase()
//        String concat(String str)
//public String[] split(String regex)  **********

        */
public class StringDemo8 {
    public static void main(String[] args) {
        String s = "HelloWorLD";
        //public byte[] getBytes()使用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中。
        //将字符串转成字节数组
        byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
//           System.out.println(bytes);
        for (int i = 0; i < bytes.length; i++) {
            System.out.print(bytes[i] + "\t");
        }
        System.out.println();
        System.out.println("===============================");
        //char[] toCharArray()
        //将字符串转成字符数组
        char[] chars = s.toCharArray();
        for (int j = 0; j < bytes.length; j++) {
            System.out.print(chars[j]);
        }
        System.out.println();
        System.out.println("=================================");
        //static String valueOf(char[] chs)
        //将字符数组转成字符串
        String s1 = String.valueOf(chars);
        System.out.println(s1);
        System.out.println("==============================");
        //static String valueOf(int i) 数据库
        //将int类型的数据转成字符串
        String s2 = String.valueOf(100);// 100 --> "100"
        System.out.println(s2);
        System.out.println("==============================");
        //String toLowerCase()
        //将字符串中的内容全部转小写
        String s3 = s.toLowerCase(Locale.ROOT);
        System.out.println(s3);
        System.out.println("==============================");
        //String toUpperCase()将字符串中的内容全部转大写
        String s4 = s.toUpperCase();
        System.out.println(s4);
        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 j = 0; j < strings.length; j++) {
            System.out.print(strings[j]);
        }

    }
}

String类的其他功能:

替换功能

String replace(char old,char new)

String replace(String old,String new)

去除字符串两边若干个空格

String trim()

按字典顺序比较两个字符串内容是否一样,这里涉及到源码分析

int compareTo(String str)

int compareToIgnoreCase(String str)

/*
        String类的其他功能:
                替换功能
                    String replace(char old,char new)
                    String replace(String old,String new)
                去除字符串两空格
                    String trim()
                按字典顺序比较两个字符串
                    int compareTo(String str)
                    int compareToIgnoreCase(String str)
 */
public class StringDemo9 {
    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("qwer","LOL");
        System.out.println(s);
        System.out.println(s3);
        System.out.println("==================================");
        //String trim() 去除字符串两边的若干个空格
        String s5="   HelloWorld    ";
        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
    }
}

1:遍历获取字符串中的每一个字符

2:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)

/*
        1:遍历获取字符串中的每一个字符
	    2:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)

 */
public class StringTest1 {
    public static void main(String[] args) {
        String s = "javaMySqlHadoopHive12138";
        //遍历获取字符串中的每一个字符
        //将字符串转成字符数组
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.print(chars[i]);
        }
        System.out.println();
        System.out.println("===================================");
        //统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
        //1、定义三个变量统计三个结果
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;
        //2、遍历字符数组得到每一个字符,判断每一个字符是属于哪一类
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if (c >= 'A' && c <= 'Z') {
                bigCount++;
            } else if (c >= 'a' && c <= 'z') {
                smallCount++;
            } else if (c >= '0' && c <= '9') {
                numberCount++;
            }

        }
        System.out.println("大写字符的个数为:" + bigCount);
        System.out.println("小写字符的个数为:" + smallCount);
        System.out.println("数字字符的个数为:" + numberCount);
    }
}

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

举例:"hADoopJava" --> "Hadoopjava"

1、全部转小写

2、获取第一个字符转大写

具体实现:

1、截取第一个字符和其他字符

2、第一个字符转大写

3、其他字符转小写

4、拼接

import java.util.Locale;

public class StringTest2 {
    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(Locale.ROOT)
                .concat(s.substring(1).toLowerCase());
        System.out.println("转换之后:"+result2);
    }
}

/*

把数组中的数据按照指定个格式拼接成一个字符串

举例:int[] arr = {1,2,3}; 输出结果:[1, 2, 3]

*/

public class StringTest3 {
    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”

分析:

1、导包并创建键盘录入对象

2、创建一个空的字符串

3、将字符串转成字符数组

4、倒着遍历,得到每一个字符

5、将每次获取到的字符进行拼接

6、输出

/*
        字符串反转
            举例:键盘录入”abc”		输出结果:”cba”

        分析:
            1、导包并创建键盘录入对象
            2、创建一个空的字符串
            3、将字符串转成字符数组
            4、倒着遍历,得到每一个字符
            5、将每次获取到的字符进行拼接
            6、输出
 */

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出现了多少次

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);


    }
}

标签:常用,String,int,System,字符串,println,第十三天,out
来源: https://blog.csdn.net/weixin_48508747/article/details/122634119