zoukankan      html  css  js  c++  java
  • String类


    201936, 星期三

    21:53

     

    一、Scanner

    1.       Scanner的概述

    2.       Scanner的构造方法原理

    a.       Scanner(Inputstream source)

    b.       System类下有一个静态的字段

                                           i.            public static final Inputstream in;标准的输入流,对应着键盘录入

    c.     一般方法

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

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

    3.       Scanner获取数据出现的小问题及解决方案

    a.       两个常用的方法:

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

                                         ii.            获取一个String类型的值:public String nextLint();

    b.       当nextInt()和nextLine()一起使用

    public static void main(String[] args) {

    Scanner sn=new Scanner(System.in);

    System.out.println("请输入一个整数:");

    int i=sn.nextInt();

    System.out.println("请输入一个字符串");

    String str=sn.nextLine();

    }

    实际上执行程序后,输出的如下

    <terminated /> Dem02 Scanner [Java API  请 输 入 第 一 个 整 :  10  请 输 入 第 二 个 字 符 串 :  10 , line2  工

    ∵ nextInt()是键盘录入整数的方法,当我们录入10的时候,其实在键盘上录入的是10和“ ”,nextInt()方法只获取了10就结束了;nextLine()是键盘录入字符串的方法,可以接受任意类型,但是它遇到 就证明一行结束了。

    解决方案:

    ①创建两个Scanner对象

    public static void main(String[] args) {

    Scanner sn=new Scanner(System.in);

    System.out.println("请输入一个整数:");

    int i=sn.nextInt();

     

    Scanner sn2=new Scanner(System.in);

    System.out.println("请输入一个字符串");

    String str=sn2.nextLine();

    }

    ②键盘录入都使用nextLine()接收,然后在判断后转为整数类型。(推荐)

     

    二、String类

    1.    String类的概述

    a.    字符串字面值“abc”也可以看成是一个字符串对象。

    b.    字符串是常量,一旦被赋值就不能被改变了。虽然可以重新赋值,但是已经不是相同的地址值了。

    2.    String类的构造方法

    a.    常见的构造方法:

                              i.        public String();//无参构造。

                             ii.        public String(byte[] bytes);//把字节数组转成字符串

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

                           iv.        public String(char[] value);//把字符数组转成字符串

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

                           vi.        public String(String original);//把字符串常量值转成字符串

    3.    常见问题:

    a.    String s1=new String("abc");//这句代码创建了几个对象

    两个,一个在常量池中,一个在堆内存中。

    b.    String s1="a" + “b”+"c";String s2="abc";那么s1==s2 和是s1.equals(s2)分别是什么?

    都为true,java中有常量优化机制,在("a" + “b”+"c")赋值给s1之前就已经变成了"abc"

    c.     String s1="ab";String s2="abc"; String s3=s1+"c";那么s2==s3和s2.equals(s3)输出值为?

    s2==s3输出false,原因是在(s1+"c")时在堆中会创建一个StringBuild(或者StringBuffer)对象,再调用toString转为"abc",改地址和s2的地址值不一样。所以为false

    d.       总结:

    ①字符串的equals方法,如果字符串的有相同的字符序列则为true,否则为false;字符串的“==”则比较的是字符串对象所指向的地址值是否相同;

    ②java语言提供对字符串串联符(+)以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuild(或者StringBuffer)类及其append方法实现的,字符转换是通过toString()方法实现的。

    4.       String类的判断功能

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

    b.       boolean equalsIgnore Case( string str):比较字符串的内容是否相同,忽略大小写

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

    d.       boolean startswith( string str):判断字符串是否以某个指定的字符串开头

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

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

     

    三、StringBuffer类的概述

    1.    StringBuffer类的概述

    a.    一个类似于String的字符串缓冲区,不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

    b.    线程安全的可变字符序列。

    2.    StringBuffer和String的区别:

    a.    String是一个不可变的字符序列。

    b.    StringBuffer是一个可变的字符序列。

    3.    StringBuffer类的构造方法

    a.    构造方法:

                              i.        public StringBuffer();//无参构造,初始容量为16个字符。

                             ii.        public StringBuffer(int capacity);//制定容量的字符串缓冲区对象

                           iii.        public StringBuffer(String str);//制定字符串内容的字符串缓冲区对象

    b.    StringBuffer的方法:

                              i.        public int capacity();//返回当前容量。 理论值

                             ii.        public int length();//返回长度(字符数),实际值。

    4.       StringBuffer常用方法:

    a.       StringBuffer的添加功能

                                           i.            public StringBuffer append(String str);//可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身。

                                         ii.            public StringBuffer insert(int offset,String str);//在制定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身。

    eg

    demo

    运行结果

    public class Demo_StringBuffer{

    public static void main(String[] args) {

    StringBuffer sb=new StringBuffer();

    StringBuffer sb2=sb.append(true);

    StringBuffer sb3=sb.append("helloworld");

    StringBuffer sb4=sb.append(123);

    }

    }

    计算机生成了可选文字: 口Console <terminated />Dem02StringBuff trueheima100 trueheima100 trueheima100 trueheima100

     

    StringBuffer是字符串缓冲区,当new的时候是在堆内创建了一个对象,底层是一个长度为16的字符数组,当调用添加方法时,不会再重新创建新对象,而是在不断向原缓冲区添加字符

    b.    StringBuffer的删除功能

                              i.    public StringBuffer deleteCharAt(int index);//删除指定位置的字符,并返回本身

                             ii.    public StringBuffer delete (int start,int end);//删除从指定位置开始(包含)到指定位置(不包含)结束的内容,并返回本身。

    c.     StringBuffer的替换功能:

                              i.    public StringBuffer replace(int start,int end,String str);//从start开始到end用str替换

    d.       StringBuffer的反转功能

                                           i.      public StringBuffer reverse();//字符串反转

    e.    Stringbuffer的截取功能

                              i.    public String substring(int start);//从指定位置截取到末尾

                             ii.    public String substring(int start,int end);//截取从start位置开始到end位置结束,包括开始位置,不包括结束位置。

    注意:返回值不再是StringBuffer,而是String,原StringBuffer本身不变化。

    5.    String与StringBuffer的转换

    a.    String→Stringbuffer转换

                              i.        通过构造方法: public StringBuffer(String str);

                             ii.        通过append()方法 eg:sb.append("helloworld");

    b.    StringBuffer→String转换

                              i.        通过构造方法: public String(StringBuffer sb);

                             ii.        通过toString()方法

                           iii.        通过substring(0,length);

     

     

  • 相关阅读:
    大假期第二次测试总结
    大假期第一次测试
    拦截导弹简单版——线性dp
    我的vim配置
    2E Bank Hacking——思维题
    2D poj Cow Relays——folyd+矩阵快速幂
    2C Numerical Sequence (hard version)
    2A Subset——折半枚举+二分
    2B 米特运输
    偷天换日——树状DP
  • 原文地址:https://www.cnblogs.com/snail0404/p/10492503.html
Copyright © 2011-2022 走看看