Day14 Scanner概述 String字符串 及其构造方法与功能

Scanner:

键盘录入工具,通过观察API发现,该类方法没有被static修饰,所以需要创建对象去使用,因此了解一下关于Scanner的构造方法

Scanner的构造方法:

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

API解释:产生从指定的输入流扫描的值,流中的字节将使用底层平台的dafault charset转换为字符,Java默认使用的编码是Unicode 万国码

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

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

之前提到过:对于录入字符串类型的数据有两种方式:next(),nextLine()

public String next():查找并返回此扫描仪的下一个完整令牌

public String nextLine():将此扫描仪推进到当前行并返回跳过的输入

nextLine可以接收一些特殊字符,如换行符:\r\n,\n,\t等

String字符串:

概述:简单理解为由一个签子将若干个字符串穿起来的串。

API官方理解:

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

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

通过观察API发现:

1、String代表的是字符串,属于java.lang包下,所以在使用时不需要导包

2、String类字符串,Java程序中的所有字符串文字(如:"abc")都被实现为此类的实例(对象)

3、字符串不变;他的值在创建后不能被改变:字符串是常量,一旦被赋值,字符串本身不能被修改。

字符串的构造方法:

public String():无参构造方法

public String(byte[] bytes):

根据一个字节数组创建出一个字符串对象

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

将字节数组中的一部分转化为字符串,从index索引处开始,长度为length的部分

public String(char[] value):

将字符数组转成一个字符串

public Stirng(char[] value,int index,int length):

将字符数组的一部分转成字符串,从index索引处开始,长度为length的部分

当转换的长度超过实际在数组中转换的长度时

报错:字符索引越界异常:StringIndexOutOfBoundsException

public String(String original):初始化新创建的字符串

 这里引出查看字符串的长度方法:
 public int length():返回此字符串的长度。

字符串的各种构造方法案例:

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 = {97, 98, 99, 100, 101};
        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)
        //将字符数组转成一个字符串
        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, 4, 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());


    }
}

输出结果:

字符串的拼接与常量池 :

字符串是常量,值在创建之后不可改变。以下代码:

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

输出结果为helloworld

解释:

当对s进行初始化时,先在常量池中开辟一处空间,存放hello字符串,再将该空间的地址值赋值给栈内存中的s,

当进行s+="world"操作时,JVM会先在常量池中查找是否有world字符串,没有则会在常量池中再开辟一块空间用于存放world。

在进行+操作时会先将hello与world做字符串拼接,再在常量池中寻找是否有helloworld字符串,没有则再开辟另外的一个空间存放helloworld,最后将helloworl的地址值赋值给s,自始至终,常量池中的值始终没有改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值