一个顶层设计者眼中只有2个东西接口,类(属性,方法)

无论String 类 , HashMap实现类 , Map接口

String str = "Hello" ;    // 定义字符串,工作中就用这个方法,另外的一个方法不用

对于String而言肯定是一个类,str应该就是这个类的对象,能够点出来这个类的方法。

String毕竟是一个类,那么类之中一定会存在构造方法,String类的构造:public String(String str)

String str = new String("Hello") ;   // 定义字符串

可以通过构造方法为String类对象实例化。

面试题:请解释字符串比较之中“==”和equals()的区别?

· ==:比较的是两个字符串内存地址的数值是否相等,属于数值比较;

· equals():比较的是两个字符串的内容,属于内容比较。

         以后进行字符串相等判断的时候都使用equals()

public class StringDemo {

public static void main(String args[]) {

String str = null ;          // 假设是输入的

if (str.equals("Hello")) {

System.out.println("条件满足。") ;

}

}

}

Exception in thread "main" java.lang.NullPointerException

at StringDemo.main(StringDemo.java:4)

而如果说现在将代码反过来操作:

public class StringDemo {

public static void main(String args[]) {

String str = null ; // 假设是输入的

if ("Hello".equals(str)) {

System.out.println("条件满足。") ;

}

}}

因为字符串常量就是一个匿名对象,匿名对象永远不可能为null,这样的比较才更加的合理。

String类的两种实例化方式的区别

在String类进行设计的时候采用了一种称为共享设计模式的概念

如果用户采用了直接赋值的方式,会将字符串的内容放入到池之中,以供其他继续使用直接赋值方式的String对象使用,如果新声明的字符串内容不再池之中,则会开辟一个新的,继续放到池,以供下次使用

public static void main(String args[]) {

String str1 = new String("Hello") ;

String str2 = "Hello" ;  // 入池

String str3 = "Hello" ;  // 使用池对象

System.out.println(str1 == str2) ;    // false

System.out.println(str1 == str3) ;    // false

System.out.println(str2 == str3) ;    // true

}

面试题:请解释String类的两种对象实例化方式的区别?

· 直接赋值:只开辟一块堆内存空间,字符串的内容可以自动入池,以供下次使用;

· 构造方法:开辟两块堆内存空间,有一块将成为垃圾,并且不能自动入池,使用intern()手工入池。

在日后的所有开发之中,String对象的实例化永远都采用直接赋值的方式完成

字符串的内容一旦声明则不可改变

String str = "Hello " ;
str += "World " ;
str= str + "!!!" ;
System.out.println(str) ;

输出:

Hello World !!!

字符串内容的更改,实际上改变的是字符串对象的引用过程,并且会伴随有大量的垃圾出现

3.2String类的常用方法(重点,背

String类除了之前所介绍的两个方法之外,还存在着大量的其他操作,考虑到String类在实际的工作之中使用非常的广泛,那么就建议大家都背下来,以下所讲解的每一个方法:记住方法的名称、返回值类型、参数的类型及个数、方法的作用

3.2.1 、字符串与字符

在很多的语言之中,都强调,字符串由字符数组所组成,那么这一概念在Java的String类之中也有体现。

No.

方法名称

类型

描述

1

public String(char[] value)

构造

将全部的字符数组内容变为字符串

2

public String(char[] value, int offset, int count)

构造

将部分字符数组变为字符串,offset表示开始点,count表示要操作的长度

3

public char charAt(int index)

普通

取得指定索引位置上的字符

4

public char[] toCharArray()

普通

将字符串转换为字符数组

范例:验证charAt()方法,这个方法是一个标志性方法

public class StringDemo {

public static void main(String args[]) {

String str = "helloworld" ;

char c = str.charAt(7) ;

System.out.println(c) ;

}

}

范例:字符串和字符数组转换,完成一个小写字符串变为大写字符串的操作,小写字母和大写字母差了32

public class StringDemo {

public static void main(String args[]) {

String str = "helloworld" ;

char data [] = str.toCharArray() ;     // 字符串变为字符数组

for (int x = 0 ; x < data.length ; x ++) {

System.out.print(data[x] + "、") ;

data [x] -= 32 ;    // 变大写

}

System.out.println() ;

System.out.println("全部字符数组变为字符串:" + new String(data)) ;

System.out.println("部分字符数组变为字符串:" + new String(data,0,5)) ;

}

}

char data [] = {76 , 79 , 86 , 69 , 'A'} ;
System.out.println(new String(data)); //输出 : LOVEA

2 、字符串与字节

String str = "abc" ;
byte data [] = str.getBytes() ; // 字符串变为字节数组
System.out.println(Arrays.toString(data));

// 输出  [97, 98, 99]

人造字符串:

byte data [] = {76 , 79 , 86 , 69} ;
System.out.println(new String(data));  // 自己编程的,LOVE

字符串除了与字符可以互相转换之外,还可以和字节互相转换,操作方法:

No.

方法名称

类型

描述

1

public String(byte[] bytes)

构造

将全部的字节数组变为字符串

2

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

构造

将部分的字节数组变为字符串

3

public byte[] getBytes()

普通

将字符串变为字节数组

4

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException

普通

字符串转码操作

一般情况下,在程序之中如果要想操作字节数组只有两种情况:

· 情况一:需要进行编码的转换时;

                    情况二:数据要进行传输的时候。

3 、字符串比较

范例:equals()方法

public class StringDemo {

public static void main(String args[]) {

String str1 = "helloworld" ;

String str2 = "HELLOWORLD" ;

System.out.println(str1.equals(str2)) ;

System.out.println(str1.equalsIgnoreCase(str2)) ;

}

}

如果现在要想比较两个字符串的大小关系,那么就必须使用compareTo()方法完成,而这个方法返回int型数据,而这个int型数据有三种结果:大于(返回结果大于0)、小于(返回结果小于0)、等于(返回结果为0

范例:比较大小compareTo()方法,C语言方法同

System.out.println("a".compareTo("b"));    //     输出-1

public class StringDemo {

public static void main(String args[]) {

String str1 = "Helloworld" ;

String str2 = "HELLOWORLD" ;

System.out.println(str1.compareTo(str2)) ;

System.out.println("Hello".compareTo("Hello")) ;

}

}

对于compareTo()方法一定要记住其返回的类型,以后还会有其他的深入讲解。

4 、字符串查找

No.

方法名称

类型

描述

1

public boolean contains(String s)

普通

查找指定的子字符串是否存在,JDK 1.5之后有

2

public int indexOf(String str)

普通

从头查找指定字符串的位置,找不到返回-1

3

public int indexOf(String str, int fromIndex)

普通

由指定位置向后查找字符串的位置,找不到返回-1

4

public int lastIndexOf(String str)

普通

由后向前查找字符串的位置,找不到返回-1

5

public int lastIndexOf(String str, int fromIndex)

普通

从指定位置由后向前查找

6

public boolean startsWith(String prefix)

普通

判断是否以指定的字符串开头

7

public boolean startsWith(String prefix, int toffset)

普通

从指定位置判断是否以指定字符串开头,JDK 1.7

8

public boolean endsWith(String suffix)

普通

判断是否以指定的字符串结尾

范例:判断开头和结尾操作

public class StringDemo {

public static void main(String args[]) {

String str = "**@@hello##" ;

System.out.println(str.startsWith("**")) ;

System.out.println(str.startsWith("@@",2)) ;

System.out.println(str.endsWith("##")) ;

}

}

范例:使用contains()方法查找字符串是否存在,直接返回boolean,用于各种的执行判断

public class StringDemo {

public static void main(String args[]) {

String str = "helloworld" ;

System.out.println(str.contains("hello")) ;

System.out.println(str.contains("xx")) ;

}

}

3.2.5 、字符串替换操作

Oracle中的替换函数是replace(),那么String类之中的替换操作有如下几个方法:

No.

方法名称

类型

描述

1

public String replaceAll(String regex, String replacement)

普通

全部替换

2

public String replaceFirst(String regex, String replacement)

普通

替换首个

范例:验证两个替换操作

public class StringDemo {

public static void main(String args[]) {

String str = "Hello World ." ;

System.out.println(str.replaceAll("l","_")) ;       // He__o Wor_d .

System.out.println(str.replaceFirst("l","_")) ;     // He_lo World .

}

}

6 、字符串截取

Oracle的截取是substr()函数,这个函数在使用的时候下标从0或1开始都是可以的,不过程序之中只能从0开始,而且不能设置为负数。

No.

方法名称

类型

描述

1

public String substring(int beginIndex)

普通

从指定位置截取到结尾

2

public String substring(int beginIndex, int endIndex)

普通

截取指定范围的内容

范例:字符串截取

public class StringDemo {

public static void main(String args[]) {

String str = "Hello World ." ;

System.out.println(str.substring(6)) ;

System.out.println(str.substring(0,5)) ;

}

}

7 、字符串拆分

所谓的拆分操作指的就是按照一个指定的字符串标记,对一个完整的字符串进行分割。如果要完成拆分操作,可以使用的方法如下:

No.

方法名称

类型

描述

1

public String[] split(String regex)

普通

按照指定的字符串全拆分

2

public String[] split(String regex, int limit)

普通

拆分为指定的长度

范例:完成全拆分

public class StringDemo {

public static void main(String args[]) {

String str = "Hello World !!!" ;

String result [] = str.split(" ") ;

for (int x = 0 ; x < result.length ; x ++) {

System.out.println(result[x]) ;

}

}

}

范例:现在要求拆分IP地址

public class StringDemo {

public static void main(String args[]) {

String str = "192.168.1.1" ;

String result []= str.split("\\.") ;

for (int x = 0 ; x < result.length ; x ++) {

System.out.println(result[x]) ;

}

}

}

提示:以后在进行字符串拆分的时候,如果遇见拆不开的问题,就使用“\\”

8 、其他方法

以上是一些可以分类的功能性的方法,但是在String类中还有一些无法分类的方法,下面统一列出。

No.

方法名称

类型

描述

1

public boolean isEmpty()

普通

判断是否为空字符串(""

2

public int length()

普通

取得字符串长度

3

public String trim()

普通

去掉左右空格

4

public String toLowerCase()

普通

将全部字符串转小写

5

public String toUpperCase()

普通

将全部字符串转大写

6

public String intern()

普通

入池

7

public String concat(String str)

普通

字符串连接

范例:取得字符串长度和是否为空

public class StringDemo {

public static void main(String args[]) {

String str = "hello" ;

System.out.println(str.isEmpty()) ;  // false

System.out.println("".isEmpty()) ;  // true

System.out.println(str.length()) ;

System.out.println("  Hello  ".length()) ; // 空格也计算

}

}

范例:使用trim()去掉空格

public class StringDemo {

public static void main(String args[]) {

String str = "   hello  " ;

System.out.println("字符串内容:〖" + str + "〗") ;

System.out.println("字符串内容:〖" + str.trim() + "〗") ;

// 对象.方法().方法().方法()...代码链,看每个方法的返回值

System.out.println("字符串长度:" + str.trim().length()) ;

}

}

String s = str.trim () ;

int len = s.length() ;

System.out.println("字符串长度:" + len) ;

找工作String类(重点,背诵)(本质是一个类)的更多相关文章

  1. Java.基础 -------- 一个Java源文件中可以有很多类,但只能有一个类是public的

    一个Java源文件中可以有很多类,但只能有一个类是public的        Java程序是从一个public类main函数开始执行的,只能有一个public是为了给类装载器提供方便,一个publi ...

  2. JAVA 类的定义(定义一个类,来模拟“学生”)

    package Code413;/*定义一个类,来模拟“学生”属性 (是什么) 姓名 年龄行为(能做什么) 吃饭 睡觉 学习对应到Java的类当中 成员变量(属性) String nanme; //姓 ...

  3. Android 新建一个类,在src新建一个类,使继承自活动

    一:先新建一个包 右键src,新建包: 二:包中新建类 右建包,新建类,将超类改为andorid.app.Activity

  4. 找工作Java面试 题搜集

    面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的 ...

  5. java自学找工作经历

    断断续续的,折腾了7个多月,学完了在网上购买的培训机构J2EE的全套课程.期间各种蛋疼看另一篇博客 http://www.cnblogs.com/work396/p/6791488.html 直接说找 ...

  6. java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)

    当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...

  7. .Net Attribute详解(上)-Attribute本质以及一个简单示例

    Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分.Attribute常常的表现形式就是[AttributeName], 随意地添加在class, met ...

  8. java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。

    首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一.  类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...

  9. [改善Java代码]不要只替换一个类

    建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.ap ...

随机推荐

  1. Saiku缓存处理(七)

    Saiku缓存处理方案 Saiku默认是从缓存中读取数据的(如果缓存中有数据的话),所以用户看到的数据不一定是最新的,如果需要看到最新的的数据需要手动刷新数据或者更改配置信息. Saiku获取实时数据 ...

  2. SQL-16 统计出当前各个title类型对应的员工当前薪水对应的平均工资。结果给出title以及平均工资avg。

    题目描述 统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg.CREATE TABLE `salaries` (`emp_no` int(11) NOT ...

  3. DevExpress WPF v18.2新版亮点(五)

    买 DevExpress Universal Subscription  免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...

  4. 实力封装:Unity打包AssetBundle(番外篇)

    前情提要:第二种打包方式. 自定义AssetBundle包扩展名 在之前的教程中,我们已经多次提到过扩展名了,并且也已经说明了如何设置自定义的AssetBundle扩展名.至于为什么还要把它单独拿出来 ...

  5. day 71-72 cookie 和session

    拓展知识   request---->请求信息 属性: request.path       # 获取访问文件路径 request.method属性 #获取请求中使用的HTTP方式(POST/G ...

  6. PHPexcel 导入import 数据到 mysql: mysql 查询数据是否存在, 如果存在返回id, 不存在, 插入返回id. 2) mysql_query , mysql_connect, mysql_select_db, mysql_error, mysql_num_rows,mysql_close

    一: 要求: 上面的图表 中的数据插入到 3张表中. 1)t_vide_warehourse 分类表: 此表中包含 一级分类 和二级分类.  二级分类是一级分类的子级. 2)t_video_info  ...

  7. 1--Selenium环境准备--Eclipse 添加Testng插件

    Eclipse安装TestNG TestNG官网地址:http://testng.org/ 1.离线安装TestNG插件: 受网络等因素影响,在线安装方式速度比较慢,可以通过如下方式离线安装TestN ...

  8. 【Python】多进程-队列

    #练习:队列 from multiprocessing import Process, Queue def offer(queue): # 入队列 queue.put("Hello Worl ...

  9. pyx文件 生成pyd 文件用于 cython调用

    转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...

  10. Python学习笔记第十九周

    目录: 一.路由系统URL 1.Django请求生命周期 2.创建Django project 3.配置 4.编写程序 二.视图 三.模板 四.ORM操作 内容: 一.URL 1.Django请求生命 ...