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和“\r\n”,nextInt()方法只获取了10就结束了;nextLine()是键盘录入字符串的方法,可以接受任意类型,但是它遇到\r\n就证明一行结束了。

解决方案:

①创建两个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);

 

 

posted @ 2019-03-07 21:30  蜗牛小传  阅读(150)  评论(0编辑  收藏  举报

青春是什么?青春就像下面这段文字!

因为我处于页面最下端,所以很少有人看到我,因为我的字体小,所以即使别人看到了,也可能一扫而过,可能不会有人愿意停下来读一下我,对别人来讲,我就像一段无聊的广告一样放在这里,对我来讲,这就是我的青春。

我曾无数次问设计师,为什么不能把我放在首页最上方,为什么不能让所有人看到我?为什么我的青春不能像别人一样绽放?设计师从来没有回答过我的问题,实际上他从来都没听到过我的声音,你是否也和我一样?拥有梦想,

却不得不在人群中彷徨,拥有青春,却没有人愿意停下来为你鼓掌?