资讯专栏INFORMATION COLUMN

Java编程基础13——常见对象_String类

PAMPANG / 2030人阅读

摘要:和的区别是字符串常量,同时也是一个类的对象,既然是对象当然可以调用类中的方法是空常量,不能调用任何方法,否则会出现空指针异常,常量可以给任意的引用数据类型赋值。

1_Scanner的概述和方法介绍*

A:Scanner的概述

B:Scanner的构造方法原理

Scanner(InputStream source)

System类下有一个静态的字段:

public static final InputStream in; 标准的输入流,对应着键盘录入。

C:一般方法

hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx

nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符

import java.util.Scanner;
public class Scanner_1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);    //键盘录入
        System.out.println("请输入一个整数:");
//        int i = sc.nextInt();    //存储在I中
//        System.out.println(i);
        if(sc.hasNextInt()) {
            int i =sc.nextInt();
            System.out.println(sc);
            
        } else {
            System.out.println("您输入的类型有误");
        }
    }
}
2_Scanner获取数据出现的小问题及解决方案*

A:两个常用的方法:

public int nextInt():获取一个int类型的值

public String nextLine():获取一个String类型的值

B:案例演示

a:先演示获取多个int值,多个String值的情况

b:再演示先获取int值,然后获取String值出现问题

c:问题解决方案

nextInt接收一个整数:当我输入10时,回车后:其实在键盘上录入的是10和rn,nextInt()方法获取10后就结束了

nextLine()是键盘录入字符串的方法,可以接收任意类型,但它凭什么能获取一行呢?

第一种:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。

第二种:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。(后面讲)

public class Scanner_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
/*        System.out.println("请输入一個整數:");
        int i1 = sc.nextInt();
        System.out.println("请输入第二個整數:");
        int i2 = sc.nextInt();
        System.out.println("i1 = " + i1 + ",i2 = " + i2);
        */
/*        
        System.out.println("请输入第一个字符串");
        String line1 = sc.nextLine();
        System.out.println("请输入第二个字符串");
        String line2 = sc.nextLine();
        System.out.println("line1 = " + line1 + ",line2 = " + line2);
        */
        
        System.out.println("请输入一個整數:");
        int i1 = sc.nextInt();
        Scanner sc2 = new Scanner(System.in);
        System.out.println("请输入第二个字符串");
        String line = sc2.nextLine();
        System.out.println("i1 = " + i1 + ",line = " + line);
    }
}
3_String类的概述*

A:String类的概述

通过JDK提供的API,查看String类的说明

可以看到这样的两句话。

a:字符串字面值"abc"也可以看成是一个字符串对象。

b:字符串是常量,一旦被赋值,就不能被改变。

public class string_1 {

public static void main(String[] args) {
    //Person p = new Person();
    String str= "abc";        //"abc"可以看成是一个字符串对象。
    str= "edf";                //当把"def"赋值给str,原来的"abc"就变成了垃圾
    System.out.println(str);    //String类重写了toString方法返回的是该对象的本身
}

}

4_String类的构造方法*

A:常见构造方法

public String():空构造

public String(byte[] bytes):把字节数组转成字符串

public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串

public String(char[] value):把字符数组转成字符串

public String(char[] value,int index,int count):把字符数组的一部分转成字符串

public String(String original):把字符串常量值转成字符串

B:案例演示

演示String类的常见构造方法

5_String类的常见面试题*

1.判断定义为String类型的s1和s2是否相等

String s1 = "abc";

String s2 = "abc";

System.out.println(s1 == s2); //true 两个常量指向同一个地址值

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

2.下面这句话在内存中创建了几个对象?

String s1 = new String("abc");//两个对象地址值,常量池一个,堆内存一个

3.判断定义为String类型的s1和s2是否相等

String s1 = new String("abc");

String s2 = "abc";

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

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

4.判断定义为String类型的s1和s2是否相等

String s1 = "a" + "b" + "c";在编译时把abc赋值给s1

String s2 = "abc";

System.out.println(s1 == s2); //true java中有常量优化机制

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

5.判断定义为String类型的s1和s2是否相等

String s1 = "ab";

String s2 = "abc";

String s3 = s1 + "c";

System.out.println(s3 == s2); //false

System.out.println(s3.equals(s2)); //true

6_String类的判断功能*

A:String类的判断功能

boolean equals(Object obj):比较字符串的内容是否相同,区分大小写

boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

boolean contains(String str):判断大字符串中是否包含小字符串

boolean startsWith(String str):判断字符串是否以某个指定的字符串开头

boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾

boolean isEmpty():判断字符串是否为空。

""和null的区别

""是字符串常量,同时也是一个String类的对象,既然是对象当然可以调用string类中的方法

null是空常量,不能调用任何方法,否则会出现空指针异常,null常量可以给任意的引用数据类型赋值。

package net.allidea.string;
public class String_4 {
    public static void main(String[] args) {
//        demo1();
//        demo2();
        
        String s1 = "zheng";
        String s2 = "";
        String s3 = null;
        
        System.out.println(s1.isEmpty());
        System.out.println(s2.isEmpty());
        System.out.println(s3.isEmpty());    //java.lang.NullPointerException
    }

    private static void demo2() {
        String s1 = "欢乐啦啦啦,嘿嘿";
        String s2 = "啦";
        String s3 = "哈哈";
        String s4 = "欢乐";
        String s5 = "嘿嘿";
        
        System.out.println(s1.contains(s2));    //判断是否包含传入的字符串
        System.out.println(s1.contains(s3));
        
        System.out.println("--------------------------------");
        
        System.out.println(s1.startsWith(s4));
        System.out.println(s1.endsWith(s5));
    }
    private static void demo1() {
        String s1 = "allidea";
        String s2 = "allidea";
        String s3 = "Allidea";
        
        System.out.println(s1.equals(s2));
        System.out.println(s2.equals(s3));
        
        System.out.println("----------------------");
        
        System.out.println(s1.equalsIgnoreCase(s2));
        System.out.println(s1.equalsIgnoreCase(s3));    //不区分大小写
    }
7_模拟用户登录*

A:案例演示

需求:模拟登录,给三次机会,并提示还有几次。

用户名和密码都是admin

分析

1.模拟登陆,需要键盘录入,scanner

2.给三次机会,需要循环,用for

3.并提示有几次,需要判断,if

public class String_test_1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i ++) {    
            System.out.println("请输入用户名:");
            String userName = sc.nextLine();
            System.out.println("请输入密码");
            String password = sc.nextLine();
            //如果是字符串常量和字符串变量比较,都是字符串常量调用方法,将变量当作参数传递,防止空指针异常
            if ("admin".equals(userName) && "123456".equals(password)) {
                System.out.println("欢迎" + userName + "登录");
                break;                                                                //跳出循环
            } else {
                if (i == 2) {
                    System.out.println("您的次数已到,请明天再来吧");
                }
                    System.out.println("输入错误,您还有" + (2 - i) + "次机会,请重新输入。");
            }
        }
    }
}
8_String类的获取功能*

A: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):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。

lastIndexOf

String substring(int start):从指定位置开始截取字符串,默认到末尾。

String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

public class String_test_2 {
    public static void main(String[] args) {
//        demo1();
//        demo2();
//        demo3();
        String s1 = "allidea";
        String s2 = s1.substring(3);
        System.out.println(s2);
        
        String s3 = s1.substring(0, 2);         //包含头,不包含尾,左闭右开
        System.out.println(s3);
    }
    private static void demo3() {
        String s1 = "allidea.net";
        int index1 = s1.indexOf("i",2);        //从指定位置向后找
        System.out.println(index1);
        
        int index2 = s1.indexOf("i");        //从后向前找,第一次出现的字符
        System.out.println(index2);
        
        int index3 = s1.lastIndexOf("a",7);
        System.out.println(index3);
    }
    private static void demo2() {
        String s1 = "allidea";
        int index = s1.indexOf("a");        //参数接收的是int类型的,传递char类型会自动提升。
        System.out.println(index);    
        
        int index2 = s1.indexOf("f");        //如果不存在返回的是-1
        System.out.println(index2);    
        
        int index3 = s1.indexOf("ll");        //获取字符串中第一个字符出现的位置
        System.out.println(index3);    
        
        int index4 = s1.indexOf("lf");        //如果不存在返回的是-1
        System.out.println(index4);
    }
    private static void demo1() {
        //        int[] arr = {11,22,33};
        //        System.out.println(arr.length);        //数组中的length是属性
                
                String s1 = "allidea";
                System.out.println(s1.length());    //length()是一个方法,获取的是每一个字符的个数。
                
                String s2 = "你吃了吗?";
                System.out.println(s2.length());
                
                char c = s2.charAt(3);        //根据索引获取对应位置的字符
                System.out.println(c);
                
                char c2 = s2.charAt(8);    
                System.out.println(c2);        //StringIndexOutOfBoundsException字符串索引越界异常
    }
}
9_字符串的遍历*

A:案例演示

需求:遍历字符串

public class String_test_2 {
    public static void main(String[] args) {
        String s = "allidea";
        for (int i = 0; i < s.length(); i++) {        //通过for循环获得自字符串的索引
//            char c = s.charAt(i);
//            System.out.print(c);s
            System.out.print(s.charAt(i));    //通过索引获取每一个字符
        }
    }
}
10_统计不同类型字符个数*

A:案例演示

需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。

ABCDEabcd123456!@#$%^

public class String_test_3 {    
//    分析:字符串都是由字符组成的,而字符的值都是有范围的,通过范围来判断是否包括该字符
//    如果包含就让计数器变量自增
    public static void main(String[] args) {
        String s = "ABCDEabcd123456!@#$%^*/";
        int big = 0;
        int small = 0;
        int num = 0;
        int other = 0;
        //1.获取每一个字符,for循环遍历
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);        //通过索引获取每一个字符
            //2.判断字符是否在这个范围内
            if (c >= "A" && c <= "Z") {
                big++;                    //如果满足大写字母,就让其对应的变量自增
            } else if (c >= "a" && c <= "z") {
                small++;                    //如果满足小写字母,就让其对应的变量自增
            } else if (c >= "0" && c <= "9") {
                num++;                    //如果满足数字,就让其对应的变量自增
            } else {
                other++;                    //如果满足大写字母,就让其对应的变量自增
            }
        }
        //打印每一个计数器的结果
        System.out.println(s + "中的大写字母有:" + big + "个,小写字母有:" + small + "个,数字有:" + num + "个,特殊符号有:" + other + "个。");
    }
}
11_String类的转换功能*

A: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):把字符串拼接。

import net.allidea.bean.Person;
public class String_6 {    
    public static void main(String[] args) {
//        demo1();
//        demo2();
//        demo3();
        String s1  = "ALLIDEA";
        String s2 = "chengxuyuan";
        String s3 = s1.toLowerCase();
        String s4 = s2.toUpperCase();
        
        System.out.println(s3);
        System.out.println(s4);
        
        System.out.println(s3 + s4);//用+拼接字符串更强大,可以用字符串与任意类型相加
        System.out.println(s3.concat(s4));
    }

    private static void demo3() {
        char[] arr = {"a","b","c"};
        String s = String.valueOf(arr);//底层是由String类的构造方法完成的,把字符数组转成字符串
        System.out.println(s);
        
        String s2 = String.valueOf(100);//将100转换为字符串
        System.out.println(s2);    
        
        Person p1 = new Person("张三",23);
        System.out.println(p1);
        String s3 = String.valueOf(p1);        //调用的是对象的toString方法
        System.out.println(s3);
    }

    private static void demo2() {
        String s = "allidea";
        char[] arr = s.toCharArray();    //将字符串转换为字符数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void demo1() {
        String s1 = "abc";
        byte[] arr = s1.getBytes();
        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + "");
        }
        
        String s2 = "你好你好";
        byte[] arr2 = s2.getBytes();    //通过gbk码表将字符串转换成字节数组,一个中文代表两个字节
        for (int i = 0; i < arr2.length; i++) {//gbk码表特点,中文的第一个字节肯定是负数
//            System.out.print(arr2[i] + "");
        }
        
        String s3 = "琲";
        byte[] arr3 = s3.getBytes();
        for (int i = 0; i < arr3.length; i++) {
            System.out.print(arr3[i] + "");
        }
    }
}
12_按要求转换字符(链式编程掌握)

A:案例演示

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

链式编程:只要保证每次调用完方法返回的是对象,就可以继续调用。

public class String_test_4 {
    public static void main(String[] args) {
        String s = "allidea";
        String s2 = s.substring(0, 1 ).toUpperCase().concat(s.substring(1).toLowerCase());
        System.out.println(s2);
    }
}
13_把数组转成字符串

A:案例演示

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

举例:

int[] arr = {1,2,3};

输出结果:

"[1, 2, 3]"

public class String_test_5 {    
    /*  * 分析:
        * 1.需要定义一个字符串
        * 2.遍历数组获取每一个元素
        * 3.用字符串与数组中的元素进行拼接
        * */    
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        String s = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                s = s + arr[i] + "]";
            } else {
                s = s + arr[i] + ", ";
            }
        }
        System.out.println(s);
    }
}
14_String类的其他功能

A:String的替换功能及案例演示

String replace(char old,char new)

String replace(String old,String new)

B:String的去除字符串两空格及案例演示

String trim()

C:String的按字典顺序比较两个字符串及案例演示

int compareTo(String str)(暂时不用掌握)

int compareToIgnoreCase(String str)(了解)

public class String_test_6 {
    public static void main(String[] args) {
//        demo1();
//        demo2();
        String s1 = "abc";
        String s2 = "de";
        
        int num = s1.compareTo(s2);            //按照码表值比较
        System.out.println(num);
        
        String s3 = "郑";
        String s4 = "成";
        int num2 = s3.compareTo(s4);
        System.out.println("郑" + 0);        //查找的是Unicode码表值
        System.out.println("成" + 0);        
        System.out.println(num2);
        
        String s5 = "nihao";
        String s6 = "NIHAO";
        int num3 = s5.compareTo(s6);
        System.out.println(num3);
        
        int num4 = s5.compareToIgnoreCase(s6);
        System.out.println(num4);
    }

    private static void demo2() {
        String s = "   all  ide  a  ";
        String s2 = s.trim();
        System.out.println(s2);
    }

    private static void demo1() {
        String s = "allidea";
        String s2 = s.replace("i", "I");//I替换i,若不存在,则不变
        System.out.println(s2);
        
        String s3 = s.replace("id", "ID");
        System.out.println(s3);
    }
}    
15_字符串反转

A:案例演示

需求:把字符串反转

举例:键盘录入"abc"

输出结果:"cba"

B:分析

1.通过键盘录入字符串scanner

2.将字符串转换成字符数组

3.倒着遍历字符数组,并再次拼接成字符串

4.打印

import java.util.Scanner;
public class String_test_7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();            //将键盘录入的字符串存储在line中
        
        char[] arr = line.toCharArray();        //将字符串转换成数组
        String s = "";
        for (int i = arr.length - 1; i >= 0; i--) {        //倒着遍历数组
            s = s + arr[i];                                //拼接成字符串
        }
        System.out.println(s);
    }
}    
16_在大串中查找小串出现的次数

A:思路图解

需求:统计大串中小串出现的次数

这里的大串和小串可以自己根据情况给出

B:代码实现-案例演示

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

public class String_test_8 {
    /*    分析
        1.定义计数器变量,变量为0
        2.通过indexOf方法在大串中找小串
            如果没有返回-1程序结束
            如果有则返回索引值
        3.根据获取的索引值,加上小串的长度,截取大串,将截取后的结果赋值给大串。
        4.回到第二部,继续
        5.返回-1,程序结束。
    */
    public static void main(String[] args) {
        String max = "nizhidaoma,wozhingshiyaochengweiyidaijavadashendenanren,zhidaoma,zhi.";//定义大串
        String min = "zhi";                                //定义小串
        
        int count = 0;                                    //定义计数器变量
        int index = 0;                                    //定义索引
        
        while ((index = max.indexOf(min)) != -1) {        //定义循环,判断小串是否在大串中出现
            count++;                                    //计数器自增
            max = max.substring(index + min.length());
        }
        System.out.println(count);
    }
}
17_编码题

验证键盘输入的用户名不能为空,长度大于6,不能有数字(提示:使用字符串String类的相关方法完成)。

import java.util.Scanner;
public class Other_11_test {
    public static void main(String[] args) {
        login();
    }

    private static void login() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        for (int i = 0; i < 6; i++) {
            String s = sc.nextLine();
            if (checkNum(s)) {
                System.out.println("验证成功!");
                break;
            } else {
                if (i == 5) {
                    System.out.println("您的次数已到,请明天再来吧");
                    break;
                }
                System.out.println("您还有" + (5 - i) + "次机会,请重新输入。");
            }
        }
    }

    public static boolean checkNum(String str) {
        String msg = "";
        boolean flag = true;
        if (str.isEmpty()) {

            msg += "不能为空,";
            flag = false;
        }

        if (str.length() <= 6) {
            msg += "长度不能少于6,";
            flag = false;
        }

        if (getNum(str) && str.length() <= 6) {
            msg += "且";
            flag = false;
        }

        if (getNum(str)) {
            msg += "不能含有数字,";
            flag = false;
        }

        if (flag == false) {
            System.out.print(msg);
        }
        return flag;
    }

    private static boolean getNum(String s) {
        final String number = "0123456789";
        for (int j = 0; j < s.length(); j++) {
            if (number.indexOf(s.charAt(j)) != -1) {
                return true;
            }
        }
        return false;
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77116.html

相关文章

  • Java编程基础12——Eclipse使用&Object

    摘要:如何去掉默认注释选择你不想要的内容,通过右边编辑。有什么用用别人写好的东西打包选中项目右键自己指定一个路径和一个名称导入包复制到项目路径下并添加至构建路径。 1.常见开发工具了解 A:操作系统自带的记事本软件 B:高级记事本软件 C:集成开发环境 IDE (Integrated Development Environment) D:Eclipse和MyEclipse的区别 a...

    张巨伟 评论0 收藏0
  • Java编程基础14——常见对象_StringBuffer&数组排序&包装

    摘要:提供了排序,查找等功能。常用操作常用的操作之一用于基本数据类型与字符串之间的转换。 1_StringBuffer类的概述 A:StringBuffer类概述 通过JDK提供的API,查看StringBuffer类的说明 线程安全的可变字符序列 (一个类似于 String 的字符串缓冲区,但不能修改 : 不能像String那样用 + 连接来修改String) B:String...

    banana_pi 评论0 收藏0
  • Java编程思想》笔记13.字符串

    摘要:的构造器经过重载可以接受多种输出目的地,不过最常用的还是和。组号为表示整个表达式,组号表示被第一对括号括起的组,依此类推。有多个重载的构造器,可以接受和对象。 点击进入我的博客 字符串操作是计算机程序设计中最常见的行为 13.1 不可变String String底层是由char[]实现的,是不可变的。看起来会改变String的方法,实际上都是创建了一个新的String对象,任何指向它...

    since1986 评论0 收藏0
  • Java编程基础01——计算机基础

    摘要:外部存储器可用于长期保存大量程序和数据,其成本低容量大,但速度较慢。 1_计算机概述(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。 应用举例 ...

    xiangzhihong 评论0 收藏0
  • Java编程基础11——面向对象_包&权限修饰符&匿名内部

    摘要:外部类要访问内部类的成员,必须创建对象。前提存在一个类或者接口这里的类可以是具体类也可以是抽象类。 1.package关键字的概述及作用(了解) A:为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改,查询 ... 方案1:按照功能分 com.heima.add ...

    Bryan 评论0 收藏0

发表评论

0条评论

PAMPANG

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<