找工作String类(重点,背诵)(本质是一个类)
一个顶层设计者眼中只有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.2、String类的常用方法(重点,背)
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类(重点,背诵)(本质是一个类)的更多相关文章
- Java.基础 -------- 一个Java源文件中可以有很多类,但只能有一个类是public的
一个Java源文件中可以有很多类,但只能有一个类是public的 Java程序是从一个public类main函数开始执行的,只能有一个public是为了给类装载器提供方便,一个publi ...
- JAVA 类的定义(定义一个类,来模拟“学生”)
package Code413;/*定义一个类,来模拟“学生”属性 (是什么) 姓名 年龄行为(能做什么) 吃饭 睡觉 学习对应到Java的类当中 成员变量(属性) String nanme; //姓 ...
- Android 新建一个类,在src新建一个类,使继承自活动
一:先新建一个包 右键src,新建包: 二:包中新建类 右建包,新建类,将超类改为andorid.app.Activity
- 找工作Java面试 题搜集
面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的 ...
- java自学找工作经历
断断续续的,折腾了7个多月,学完了在网上购买的培训机构J2EE的全套课程.期间各种蛋疼看另一篇博客 http://www.cnblogs.com/work396/p/6791488.html 直接说找 ...
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...
- .Net Attribute详解(上)-Attribute本质以及一个简单示例
Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分.Attribute常常的表现形式就是[AttributeName], 随意地添加在class, met ...
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...
- [改善Java代码]不要只替换一个类
建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.ap ...
随机推荐
- Saiku缓存处理(七)
Saiku缓存处理方案 Saiku默认是从缓存中读取数据的(如果缓存中有数据的话),所以用户看到的数据不一定是最新的,如果需要看到最新的的数据需要手动刷新数据或者更改配置信息. Saiku获取实时数据 ...
- SQL-16 统计出当前各个title类型对应的员工当前薪水对应的平均工资。结果给出title以及平均工资avg。
题目描述 统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg.CREATE TABLE `salaries` (`emp_no` int(11) NOT ...
- DevExpress WPF v18.2新版亮点(五)
买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...
- 实力封装:Unity打包AssetBundle(番外篇)
前情提要:第二种打包方式. 自定义AssetBundle包扩展名 在之前的教程中,我们已经多次提到过扩展名了,并且也已经说明了如何设置自定义的AssetBundle扩展名.至于为什么还要把它单独拿出来 ...
- day 71-72 cookie 和session
拓展知识 request---->请求信息 属性: request.path # 获取访问文件路径 request.method属性 #获取请求中使用的HTTP方式(POST/G ...
- 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 ...
- 1--Selenium环境准备--Eclipse 添加Testng插件
Eclipse安装TestNG TestNG官网地址:http://testng.org/ 1.离线安装TestNG插件: 受网络等因素影响,在线安装方式速度比较慢,可以通过如下方式离线安装TestN ...
- 【Python】多进程-队列
#练习:队列 from multiprocessing import Process, Queue def offer(queue): # 入队列 queue.put("Hello Worl ...
- pyx文件 生成pyd 文件用于 cython调用
转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...
- Python学习笔记第十九周
目录: 一.路由系统URL 1.Django请求生命周期 2.创建Django project 3.配置 4.编写程序 二.视图 三.模板 四.ORM操作 内容: 一.URL 1.Django请求生命 ...