博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java第十二天
阅读量:6334 次
发布时间:2019-06-22

本文共 3798 字,大约阅读时间需要 12 分钟。

hot3.png

60.字符串

(1)概述    String  str = “abc”;字符串是类,是引用的数据类型    

(2)字符串的常量

String  str = “abc”;

这是定义了一个字符串的常量。常量是不可改变的量,字符串是不能改变的。

public class StringTest {    public static void main(String[] args) {        String str="moni";        //这里不是做加等,在字符串上做拼接实际是新产生字符串        str+="ca";        System.out.println(str);    }}

特点:

字符串常量是共享的(在数据共享区中有一个字符串常量池)

字符串不能变化,如果我们在字符串上做拼接,其实是新产生一个字符串。

(3)字符串的构造器

字符串常量是一种定义的方式

字符串需要有其他形式的构造器,比如可以通过字符的数组,字节数组,io流中的数据等等 。

ec9293cf4babb7c5a146985c6c3471a5831.jpg

12b3f2f9fbd399d4b5ad4eb97aa17a27edf.jpg

public class StringTest1 {    public static void main(String[] args) {// 第一种方式        String s=new String();        System.out.println(s);        String s1="";//第二种方式通过字节数组来创建字符串        byte[] b=new byte[]{88,89,90,100,98,99};        String bs=new String(b);        System.out.println(bs);//第三种方式通过字符节数组来创建字符串,offset是索引的位置,length表示引用的长度        String bs2=new String(b,1,4);        System.out.println(bs2);//第四种通过字节数组来创建字符串        char[] c={'m','o','n','i','c','a'};        String cs=new String(c);        System.out.println(cs);//第五种通过字节数组来创建字符串offset是索引的位置,count表示引用的长度        String cs2=new String(c,2,4);        System.out.println(cs2);//第六种通过字符串常量创建字符串        String ss=new String("original");        System.out.println(ss);    }}

(4)面试题

String s1 = new String (“abc”);

String s2 = “abc”;

有什么区别?

new String (“abc”);如果没有在字符串的常量池中没有abc就会在堆中创建一个对象,同时又在字符串常量池中也创建一个对象,然后用堆中的对象来引用字符串常量池中对象。实则创建了2个对象。

new String (“abc”); 如果在字符串的常量池中有abc,那么就会在堆中创建一个对象,直接引用已经存在的字符串常量池中的那个对象。

String s2 = “abc”;是直接在字符串的常量池种创建一个abc

(5)空字符串和null的区别

空字符串是有效的引用,有地址的,只不过是内容的长度是0

null这个引用是空引用,不能使用。使用一定会报空指针的错误。引用数据类型的默认值是null。

(6)字符串的判断方法

78414cb9c34d5c6b030c3ce2f17140520e6.jpg

e24df940994241bb3ba5de05b1f21dfa144.jpg

ede8394c9ad87f592995f97e8d32f9bd039.jpg

be29468a034ab57032ad53a949fe80d00f8.jpg

public static void main(String[] args) {        String s="i love you!";//    boolean endsWith(String suffix)判断一个字符串是否以某一个字符串为后缀        boolean b1=s.endsWith("!");        System.out.println(b1);        String s1="I Love You!";//    boolean equals(Object anObject) 判断两个字符串的值是否相等        boolean b2=s.equals(s1);        System.out.println(b2);//    boolean equalsIgnoreCase(String anotherString) 判断两个字符串忽略大小写后是否相等        boolean b3=s.equalsIgnoreCase(s1);        System.out.println(b3);//    boolean contains(CharSequence s) 判断一个字符串是否包含一个子字符串        boolean b4=s.contains("love");        System.out.println(b4);//    boolean startsWith(String prefix) 判断一个字符串是否以某一个字符串为开头        boolean b5=s.startsWith("i");        System.out.println(b5);//    boolean isEmpty() 判断一个字符串是否是空串        boolean b6="".isEmpty();        System.out.println(b6);//判断一个字符串是否是空串, 最好把空串的常量放在前面,防止空指针异常        boolean b7="".equals(s);        System.out.println(b7);    }

(7)字符串的获取功能

b17b549de5f24eb59cb69ebe97dc83bfc89.jpg

629b010d29bc60dad74f74f716e9291a482.jpg

5385d51744de899b2c3f8f897da61b472a8.jpg

2a98c8810f6d755e6d4579296699f1cb4e3.jpg

public static void main(String[] args) {        String s="i love you!";//    int length() 获得字符串的长度,区别于数组的长度是属性        int length=s.length();        System.out.println(length);//     char charAt(int index)  根据索引号获得字符        char ca=s.charAt(5);        System.out.println(ca);//     int indexOf(int ch)  根据指定字符(ascii码对应字符)获得该字符在字符串中首次出现的位置        int idi=s.indexOf(101);        System.out.println(idi);//    int indexOf(String str)  根据指定字符串获得在母字符串中第一次出现的索引        int ids=s.indexOf("ve");        System.out.println(ids);    }

3715dff8f492fc359a8e5dd88422270ae14.jpg

c34c9faf419915a015c5d9b34d8259aa87b.jpg

/*练习:计算一个字符串中大写字母和小写字母还有数字的数量23aosdf23aosdfSDFGsfdgloasasdfasfgsrgqADF2453sadfgag*/public class StringTest4 {    public static void main(String[] args) {        int num=0;        int upper=0;        int downer=0;        String s="23aosdf23aosdfSDFGsfdgloasasdfasfgsrgqADF2453sadfgag";        for (int i = 0; i < s.length(); i++) {            int asc=s.charAt(i);            if(asc>47&&asc<58){                num++;            }            if(asc>64&&asc<91){                upper++;            }            if(asc>96&&asc<123){                downer++;            }        }        System.out.println("字符串中大写字母数量是:"+upper);        System.out.println("字符串中小写字母数量是:"+downer);        System.out.println("字符串中数字数量是:"+num);    }}

76d049c0dc91f063ffa6679094d6b41cdb0.jpg

转载于:https://my.oschina.net/u/4110331/blog/3048226

你可能感兴趣的文章
浅谈apache与tomact的整合
查看>>
SQL Server vNext CTP1 on Linux
查看>>
1-为 Lync Server 2010 准备 Active Directory 域服务
查看>>
NetBackup下ORACLE恢复测试方案实例解析
查看>>
【有奖征文】“失业”程序员的苦辣酸甜
查看>>
IE9是如何被FireFox4超越全球市场份额的?
查看>>
linux bunzip2命令
查看>>
敏捷个人:通过实践TOGAF来思考如何学习并应用新的方法?
查看>>
Android系统的开机画面显示过程分析(6)
查看>>
vivo Hi-Fi+QQ音乐 数字音乐市场的一剂良方
查看>>
Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
查看>>
聚焦触宝反侵权事件:中国创业者用什么护航海外市场大门
查看>>
AOP技术基础
查看>>
Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(2)
查看>>
无线802.11n 2.4G与5G性能测试
查看>>
子域名信息收集攻略
查看>>
[Android]开发数独游戏思路分析过程
查看>>
SpreadJS 类Excel表格控件 - V12 新特性详解
查看>>
理解并取证:IPv6与IPv4在报文结构上的区别
查看>>
EOS主网上线只是开始,如何运营决定未来
查看>>