1.Scanner的概述和方法介绍

* A:Scanner的概述
  * 是一个从键盘输入的类,有final修饰,不能被子类继承
  * Scanner sc = new Scanner(System.in);
  * String str = sc.nextLine();
* B:Scanner的构造方法原理
  * Scanner(InputStream source)
  * System类下有一个静态的字段:
  * public static final InputStream in; 标准的输入流,对应着键盘录入。

* C:一般方法
  * hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx。
  * nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符。

2.Scanner获取数据

* 两个常用的方法:
  * public int nextInt():获取一个int类型的值
  * public String nextLine():获取一个String类型的值。

3.String类的概述

* A:什么是字符串
* B:String类的概述
  * 通过JDK提供的API,查看String类的说明
  * 1.Java 程序中的所有字符串字面值(如"abc")都作为此类的实例(对象)实现。
  * 2.字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
  * 3.String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
  * 4.Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuilder(或 StringBuffer)类及其append 方法实现的。字符串转换是通过toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。
  * 5.除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullPointerException。

  * 可以看到这样的两句话。
    * a:字符串字面值"abc"也可以看成是一个字符串对象。
      * String s = "myworld";
    * b:字符串是常量,一旦被赋值,就不能被改变。但可以使其变成垃圾。

4.String类的构造方法

* A:常见构造方法
  * 1.public String():空参构造,表示一个空字符序列
  * 2.public String(byte[] bytes):把字节数组转成字符串,(也称解码)
  * 3.public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
  * 4.public String(char[] value):把字符数组转成字符串
  * 5.public String(char[] value,int index,int count):把字符数组的一部分转成字符串
  * 6.public String(String original):把字符串常量值转成字符串
* B:案例演示
  * 演示String类的常见构造方法
  * "" 与 null 的区别??
    * String s8 = "";
    * String s9 = null;
    * System.out.println(s8);
    * System.out.println(s9);//打印对象的引用如果是null就返回null,如果不是null就
    * 返回对象的toString方法
    //""--是一个String类的对象,可以调用String类中所有方法
    //null--null是一个空值,不能调用任何方法,因为调用就会报空指针异常(NullPointerException)
    * public int length():返回此字符串的长度。

5.String类的常见面试题

* 1.判断定义为String类型的s1和s2是否相等
  * String s1 = "abc";//会进常量池创建对象,然后把地址赋给s1。
  * String s2 = "abc";//先看常量池中有没有相同的对象,有的话,把地址赋给s2,没有的话,重新创建对象。
  * System.out.println(s1 == s2);//比较的是对象的地址,相同。
  * System.out.println(s1.equals(s2));//比较的是对象的值。

* 2.下面这句话在内存中创建了几个对象?
  * String s1 = new String("abc");//创建了俩对象,一个在常量池里,一个堆里(常量池的副本)。

* 3.判断定义为String类型的s1和s2是否相等
  * String s1 = new String("abc");//创建了俩对象,其中s1指向的是在堆里的那个对象的地址,
  * String s2 = "abc";//s2指向的是在常量池中对象的地址。
  * System.out.println(s1 == s2); ?//比较地址值,一个常量池中,一个堆中,是不相等的。
  * System.out.println(s1.equals(s2)); ?//比较的是对象的值,相等。

* 4.判断定义为String类型的s1和s2是否相等
  * String s1 = "a" + "b" + "c";//java中自带常量优化机制,右边在编译时,已经是“abc”字符串,所以在常量池中创建对象,然后把地址赋给s1,
  * String s2 = "abc";//先在常量池中查找是否有相同的对象,如果有,则把对象的地址值,赋给s2,如果没有,就在常量池中创建一个对象,然后把其地址值付给s2,
  * System.out.println(s1 == s2); ?//比较地址值,他们都指向常量池中相同的对象,所以相等,结果为true,
  * System.out.println(s1.equals(s2)); ?//比较的是对象中的值,相等,结果为ture。

* 5.判断定义为String类型的s1和s2是否相等
  * String s1 = "ab";//在常量池中创建对象,然后把其地址赋给s1,
  * String s2 = "abc";//在常量池中创建对象,然后把其地址赋给s2,
  * String s3 = s1 + "c";//当字符串与对象用+连接的时候,底层会调用StringBuffer的append方法,对字符串进行添加,然后将StringBuffer对象转换为String对象,并赋值给s3,s3记录的是堆内存对象的地址值。
  * System.out.println(s2 == s3);? // false
  * System.out.println(s3.equals(s2)); ? //ture

6.String类的判断功能

  * boolean equals(Object obj):比较字符串的内容是否相同,按字典顺序,区分大小写
  * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
  * boolean contains(String str):判断大字符串中是否包含小字符串
  * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
  * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
  * boolean isEmpty():判断字符串是否为空。

7.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):从指定位置开始到指定位置结束截取字符串。

8.统计不同类型字符个数

  1. 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
  2. public static void main(String[] args) {
  3. //定义计数器
  4. int big = 0;//大写字母
  5. int small = 0;
  6. int math = 0 ;
  7. int other = 0;
  8. Scanner sc = new Scanner(System.in);
  9. System.out.println("请输入一个字符串:");
  10. String str = sc.nextLine();
  11. for (int i = 0; i < str.length(); i++) {
  12. char temp = str.charAt(i);
  13. if(temp >= 'A' && temp <= 'Z'){
  14. big++;
  15. }else if(temp >= 'a' && temp <= 'z'){
  16. small++;
  17. }else if(temp >='0' && temp <= '9'){
  18. math ++;
  19. }else {
  20. other++;
  21. }
  22. }
  23. System.out.println("大写字母:"+big);
  24. System.out.println("小写字母:"+small);
  25. System.out.println("数字:"+math);
  26. System.out.println("非法字符:"+other);
  27. }

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

  1. 需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. System.out.println("请输入一个字符串:");
  5. String str1 = sc.nextLine();
  6. String str2 =
  7. //链式编程
  8. str1.substring(0, 1).toUpperCase().concat(str1.substring(1, str1.length()).toLowerCase());
  9. System.out.println(str2);
  10. }
  1. 需求:把数组中的数据按照指定个格式拼接成一个字符串
  2. * 举例:
  3. * int[] arr = {1,2,3};
  4. * 输出结果:
  5. * "[1, 2, 3]"
  6. public static void main(String[] args) {
  7. int[] arr = {1,2,3}; //定义一个数组
  8. String str = "["; //初始化字符串数组的值为“[”
  9. for (int i = 0; i < arr.length; i++) { //遍历数组
  10. if(i == 2){ //若遍历到最后时 ,需要做的处理
  11. str = str + arr[i] + "]";
  12. }else { //某则则是这个处理
  13. str = str + arr[i] + ",";
  14. }
  15. }
  16. System.out.println(str);//打印字符串
  17. }

10.String类的其他功能

* A:String的替换功能及案例演示
  * String replace(char old,char new) //将字符串中的字符old值全部替换成字符new值
  * String replace(String old,String new)
* B:String的去除字符串两空格及案例演示
  * String trim()
* C:String的按字典顺序比较两个字符串及案例演示
  * int compareTo(String str)(暂时不用掌握)
  * int compareToIgnoreCase(String str)

  1. 需求:把字符串反转
  2. * 举例:键盘录入"abc"
  3. * 输出结果:"cba"
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. System.out.println("请输入一个字符串:");
  7. String str = sc.nextLine();
  8. char[] arr = str.toCharArray();//把字符串转化成字符数组
  9. for (int i = 0; i < arr.length/2; i++) {
  10. char temp = arr[i];
  11. arr[i] = arr[arr.length - 1 - i];
  12. arr[arr.length - 1 - i] = temp;
  13. }
  14. String str1 = "" ;
  15. for (char c : arr) {
  16. str1 = str1 + c;
  17. }
  18. System.out.println(str1);
  19. }
  1. 统计大串中小串出现的次数
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. System.out.println("请输入较大的字符串:");
  5. String strbig = sc.nextLine();
  6. System.out.println("请输入较小的字符串:");
  7. String strsmall = sc.nextLine();
  8. int count = 0 ;//计数器
  9. int index;
  10. while((index = strbig.indexOf(strsmall)) != -1){
  11. strbig = strbig.substring(index + strsmall.length());
  12. count++;
  13. }
  14. System.out.println(count);
  15. }

Scanner、String(java基础知识十二)的更多相关文章

  1. java基础知识(二)-----多态和构造函数

    一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍, ...

  2. Java基础(十二):包(package)

    一.Java 包(package): 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间.包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹 ...

  3. Java基础知识(二)

    一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...

  4. Java 基础知识总结 (二、基本数据类型)

    二.基本数据类型 java基本数据类型只能先声明后使用 boolean  true/false char 16-bit unicode character byte 8-bit integer sho ...

  5. Java基础知识陷阱(二)

    本文发表于本人博客. 上次说了一些关于字符串的知识,都是比较基础的,那这次也说下关于对象地址问题,比如传参.先看下面代码: public void changeInt(int a){ a = ; } ...

  6. Java基础(十二)IO输入输出

    一.IO 概述 1.IO 概念 IO:I 代表 Input 输入:O 代表 Output 输出. Java 中 IO 是以流为基础进行输入输出,所有的数据被串行化(保存)写入输出流,或者从输入流读入. ...

  7. ASP.NET Core 2.2 基础知识(十二) 发送 HTTP 请求

    可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例. 这能带来以下好处: 提供一个中心位置,用于命名和配置逻辑 HttpClient 实例. 例如 ...

  8. 对象数组、集合、链表(java基础知识十五)

    1.对象数组的概述和使用 * 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. Student[] arr = new Student[5]; //存储学生 ...

  9. 夯实Java基础(十二)——异常处理

    1.异常处理概述 在Java程序执行过程中, 总是会发生不被期望的事件, 阻止程序按照程序员预期正常运行, 这就是Java程序出现的异常. 异常处理是基于面向对象的一种运行错误处理机制,通过对异常问题 ...

随机推荐

  1. 史上最详细的linux关于connect: network is unreachable 问题的解决方案

    1.虚拟机常用连接网络方式有两种:桥接和NAT. 使用桥接模式:则保证虚拟机的网段与物理机的网段保持一致.如下: 虚拟机网卡配置: 物理机使用WiFi接入网络(我用的是WiFi,你们可能用的是有线道理 ...

  2. CSGO

    CSGO Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Problem D ...

  3. msp430入门学习40

    msp430的其他八 msp430入门学习

  4. HDU 4341 Gold miner(分组背包)

    题目链接 Gold miner 目标是要在规定时间内获得的价值总和要尽可能大. 我们先用并查集把斜率相同的物品分在同一个组. 这些组里的物品按照y坐标的大小升序排序. 如果组内的一个物品被选取了,那该 ...

  5. [bzoj3308]九月的咖啡店_欧拉筛素数_费用流

    bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...

  6. B站papi酱、陈一发、李云龙

    李云龙-花田错 https://www.bilibili.com/video/av10842071/?from=timeline&isappinstalled=1 李云龙:你猜旅长怎么说? h ...

  7. [BOI2007] Mokia

    题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...

  8. Linux最常用的命名

    一.环境配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 vim /etc/sysconfig/network vim /etc/hostname vi ...

  9. Spring MVC使用Schedule实现定时任务

    Schedule存在spring-context.jar包中. 实现简单步骤: 1.配置bean.xml开启定时任务支持. <?xml version="1.0" encod ...

  10. linux系统(ubuntu14.04)安装mentohust完毕校园网锐捷认证

    近来升级电脑又一次做了系统.再次面临这linux系统下的各种校园网上网限制. 我在这里採用了mentohust来完毕锐捷认证. 这里我们选择Mentohust取代锐捷. Mentohust 是由华中科 ...