黑马程序员-String
来源:互联网 发布:php class 内调用方法 编辑:程序博客网 时间:2024/04/30 10:40
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
String类
一、基本特性
String s1 = ” abc“ s1 是一个类型变量,”abc“,是一个对象,字符创最大的特点;一旦被初始化就不可以改变
String s2 = new String("abc"); String 类复写了Object 类中的equals方法,该方法用于判断字符串是否相同。
类之间的==是比较内存地址是否相同
二、 创建几个对象
1)、 String str = new String("abc");紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象了?
答案是:2个。我们可以把上面这行代码分成String str 、=、"abc"和 new String()四个部分来看待。
String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是变量str进行初始化,将某个对象的引用赋值
给他,也没有创建对象。那么,new String("abc")为什么又能被看成”abc"和new String()呢?
创建一个类有两种方法: 1 使用new创建对象 2 调用 Class 类的newInstance 方法,利用反射机制创建对象
String的构造器: public String (String original) {} 所以我们是使用new调用了String类的上面那个构造器方法,创建了一个对象,并把它的引用赋值给了str变量。同时 我 们注意到被调用的构造器方法接受的参数也是一个String对象,这个对象也是"abc”。
2)、String str = "abc";
毫无疑问,这行代码创建了一个String对象。
String a =“abc" ; String b = "abc:
答案是一个
String a = "ab"+"cd"
答案是三个
造成以上三个样例的原因是:在java虚拟机(JVM)中存在着一个字符串吃,其中保存着很多String对象。
并且可以被共享使用,因此提高了效率。由于String类是final的,它的值一创建就不刻意改变,因此我们不用担心String对象共享二带来的程序的混乱,我们再回头看看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。因此,我们不难理解前面三个例子中头两个例子为什么是这个答案了。
三、常见操作方法
1、获取
1.1字符串中包含的字符数,也就是字符串的长度
int length()://获取长度。
1.2根据位置获取位置上的某个字符
char charAt(int index)://当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。
1.3根据字符获取该字符存在字符串的位置
int indexOf(int ch)://返回的是ch在字符串中第一次出现的位置。//传入的是字符对应的ASCII码。//如果没有找到,返回-1。
int indexOf(int ch,int fromIndex)://从fromIndex指定位置开始,获取ch在字符串中出现的位置。
int indexOf(String str)://返回的是str在字符串中第一次出现的位置。
int indexOf(String str,int fromIndex)://从fromIndex指定位置开始,获取str在字符串中出现的位置。
int lastIndexOf()://反向索引
2、判断
2.1字符串中是否包含某一个子串
booleancontains(str);
//特殊之处:indexOf(str)可以索引str第一次出现的位置,如果返回-1表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。如:if(str.indexOf(“aa”)!=-1)而且该方法既可以判断,又可以获取出现的位置。如果只为判断,用contains。
2.2字符串中是否有内容
booleanifEmpty();//原理就是判断长度是否为0。
2.3字符串是否是以指定内容开头
booleanstartsWith(str);
2.4字符串是否是以指定内容结尾
booleanendsWith(str);
2.5判断字符串内容是否相同,复写了Object类中的equals方法
booleanequals(str);
2.6判断内容是否相同,并忽略大小写。
booleanequalsIgnoreCase();
3、转换
3.1将字符数组转成字符串
构造函数:String (char[]);
String(char[],offset,count);//将字符数组中的一部分转成字符串。
静态方法:
static String copyValueOf(char[]);
staticString copyValueOf(char[] data,int offset ,int count );
static String valueOf(char[]);
3.2将字符串转成字符数组
char[]toCharArray();
3.3将字节数组转成字符串
String (byte[]);
String(byte[],offset,count);//将字节数组中的一部分转成字符串。count表示个数。
3.4将字符串转成字节数组
byte[]getBytes();
3.5将基本数据类型转成字符串
StringvalueOf(int);
StringvalueOf(double);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4、替换
Stringreplace(oldchar,newchar);//返回的是一个新字符串。如果要替换的字符不存在,返回的还是原字符串。
5、切割
String[] split(regex);//涉及到正则表达式的点,不能作为切割字符串的regex。
6、子串,获取字符串中的一部分
String substring(begin);//从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。
Stringsubstring(begin,end);//包含头,不包含尾。
7、转换,去除空格,比较
7.1将字符串转成大写或小写
StringtoUpperCase();
String toLowerCase();
7.2将字符串两端的多个空格去除
String trim();
7.3对两个字符串进行自然顺序的比较
intcompareTo(String);
四实例练习
需求:判断一个字符串在另一个字符串中出现的次数。
class Example{public static void main(String[] args) {String str = new String("abcadsfjoiwehpuabasdkjfoab");String target = "ab";System.out.println("ans:"+count(target,str));}/** * num 为计数器。 */public static int count(String target,String tmp){int len = tmp.length();int lenTarget = target.length();int number = 0;for(int i=0;i<=len-lenTarget;){if(tmp.substring(i, i+lenTarget).equals(target)) { number++; i+=lenTarget;}else i++;}return number;}}
需求:获取两个字符串中最大相同子串
class Example{public static void main(String[] args) {String s1 = new String("abcdefabcabc");String s2 = new String("abcabcabc");System.out.println("ans="+getMaxSubString(s1,s2));}public static String getMaxSubString(String s1,String s2){String max = null;String min = null;if(s1.length()>s2.length()){max = s1;min = s2;}else{max = s2;min = s1;}/** * i 表示长度,j表示最大相同字符串的开头位置 */ for(int i=min.length();i>=1;i--) for(int j=0;j+i<=min.length();j++) if(max.contains(min.substring(j, j+i)))return min.substring(j,j+i);return "no answer";}}
- 黑马程序员,String练习题
- 黑马程序员-String类
- 黑马程序员 string类型
- 黑马程序员---String类
- 黑马程序员---String类
- 黑马程序员-String类
- 黑马程序员-----String
- 黑马程序员 String类
- 黑马程序员_day13 String。
- 黑马程序员-----String类
- 黑马程序员---String 类
- 黑马程序员----获取String
- 黑马程序员---String 判断
- 黑马程序员---String 转换
- 黑马程序员---String 结尾
- 黑马程序员---string【java】
- 黑马程序员-String类
- 黑马程序员----4String
- 深入详解SQL中的Null
- vs2013生成lib
- Number of 1 Bits
- Java几款性能分析工具的对比
- Facebook 和 Google 如何激发工程师的创造力
- 黑马程序员-String
- Wireshark
- &a+1与a+1
- linux /proc/pid进程信息说明
- xmlns:tools="http://schemas.android.com/tools"以及tools:context=".ConfActivity"是什么意思
- 数据结构一:最大子序列和问题
- Java中的多线程
- Two Sum
- jQuery源码-解除绑定事件函数unbind