找工作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 ...
随机推荐
- MySQL5.6数据库8小时内无请求自动断开连接
问题: 最近的项目中,发现Mysql数据库在8个小时内,没有请求时,会自动断开连接,这是MySQL服务器的问题.The last packet successfully received from t ...
- HanLP自然语言处理包介绍
支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换, ...
- :策略模式--Duck
原则:封装变化的部分:针对超类编程,不针对实现:多组合少继承: #ifndef __DUCK_H__ #define __DUCK_H__ #include "FlyBehavior.h&q ...
- ssh框架中,工具类调用service层方法(参考https://www.cnblogs.com/l412382979/p/8526945.html)
代码如下: package common.dataService; import javax.annotation.PostConstruct; import org.springframework. ...
- Java线程的三种方式
创建线程有三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future创建线程 三种方式详解如下: ---------------------------- ...
- 第一章 使用功能测试协助安装Django
1.1 第一个简单的测试--断言 from selenium import webdriver browser = webdriver.Firefox() browser.get('http://lo ...
- VCL界面控件DevExpress VCL Controls发布v18.2.3|附下载
DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...
- STA/LTA方法
STA是用于捕捉地震信号的时间窗,因此STA越短,就对短周期的地震信号捕捉越有效:LTA是用于衡量时间窗内的平均噪声,STA/LTA就可以根据周围环境噪声程度自适应地调整其对于某一类型地震信号的敏感度 ...
- Oracle hint手动优化
例子 select/*+FULL(fortest)*/ * from fortest where id = 2000000 //使用0.70s时间 select* from fortest where ...
- ChinaCock界面控件介绍-TCCImageViewerForm
有多个图片,左右滑动可以切换,通过手势还可以放大.缩小查看,象常见的相册,就是这样子实现效果. 现在,我们有了TCCImageViewerForm组件,也可以轻松实现这样的场景应用. 现在看看TCCI ...