Java面向对象——String类 StringBuffer类 StringBuiler类
2014-02-20 19:05
435 查看
欢迎光临新长城博客中心
面向对象
当然什么都不用说字符串是一个特殊的对象,想要对字符串进行操作,首先要想到API,字符串是一个复杂的事物,而Java已经用面向对象的想帮我们封装成了对象,方便了我们的操作,所以我们只要找到String,就可以对字符串进行操作了。
Java API文档
String概述:
1、字符串是一个特殊的对象。
2、字符串一旦初始化就不可以被改变。
代码示例:
public class Test{
public static void main(String[]
args){
String
str1 = "程序员";
/*str1是一个类类型变量,"程序员"是一个对象。字符串最大特点:一旦被初始化,就不可以被改变*/
//str1 = "程序员论坛";
/*字符串"程序员" 从未改变,改变的是
str1的指向,str1引用刚才指向"程序员"这个对象,现在又指向"程序员论坛"这个对象*/
String
str2 = new String("程序员");
/*
str1跟str2有什么区别?
str1的"程序员"是一个对象。
str2的"程序员"是一个对象,而new String()又是一个对象。
简单的说str1是一个对象,str2是2个对象。
*/
System.out.println(str1==str2);/*false,因为Java中new出来的是另外一个对象,==号是比较对象的内存地址值是否相同,由于是不同对象,所以结果为false。*/
System.out.println(str1.equals(str2));/*true,因为String类复写了Object类中的equals方法,建立了自己特定的比较方式,String类中比较的是字符串的内容是否相同,俩个都是"程序员"所以结果为true。*/
}
}
字符串的常见操作
String类是用于描述字符串事物。
那么它就提供了对字符串进行操作的多种方法。
常见的操作:
1、获取。
1.1 字符串中的包含的字符数,也就是字符串的长度。
1.2 根据位置获取位置上某个字符。
1.3 根据字符获取该字符在字符串中位置。
反向获取:
代码示例:
public class Test{
public static void main(String[]
args){
String s ="程序员";
for(int x=0;x<s.length();x++){
sop(s.charAt(x));
}
Sop();
int i = 0;
if((i=s.indexOf('马'))!=-1){
for(int
x=++i;x<s.length();x++){
sop(s.charAt(x));
}
sop();
}
}
public static void sop(Object
obj){
System.out.print(obj);
}
public static void Sop(Object
obj){
System.out.println(obj);
}
}
2、判断
特殊之处:indexOf(str)可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。if(str.indexOf(“aa”)!=-1)而且该方法既可以判断,也可以获取出现位置。
代码示例:
public class Test{
public static void main(String[]
args){
String name = "ArrayTool.Java";
Sop(is_Class_File(name));
}
public static boolean is_Class_FileName(String
name){
String fileName = "ArrayTool.Java";
if(name!=null){
if(!name.isEmpty()){//注意:如果字符串没有内容返回的是真,有返回的是假
if(name.endsWith(".Java")){
if(name.startsWith("ArrayTool")){
if(name.equalsIgnoreCase(fileName)){
if(name.equals(fileName)){
return true;
}
}
}
}
}
}
return false;
}
public static void Sop(Object obj){
System.out.println(obj);
}
}
3、转换
3.1将字符数组转成字符串俩种方法:一种是构造函数,一种是静态方法。
构造函数:
静态方法:
3.2将字符串转成字符数组。
3.3 将字节数组转成字符串。
3.4 将字符串转成字节数组。
3.5 将基本数据类型转成字符串。
静态方法:
其实还有更加简单的方法可以将基本类型数据转成字符串,只要在基本类型数据的后面加上""就转成字符串了。
因为基本数据类型和字符串相加结果是字符串。
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4、替换
5、切割
6、子串。获取字符串中的一部分。
7、转换,去除空格,比较。
7.1将字符串转成大写或则小写。
7.2 将字符串两端的多个空格去除。
7.3 对两个字符串进行自然顺序的比较。
注意:Java获取,开始到结束是包含头不包含尾。
练习:
模拟一个字符串去除空格。
public class Test{
public static void main(String[] args) {
String str ="
程 序 员 ";
System.out.println(trim(str));
}
public static String myTrim(String
str){
int start =0;
int end =str.length()-1;
for(;start<=end && str.charAt(start)==' ';)
start++;
for(;start<=end && str.charAt(end)==' ';)
end--;
return str.substring(start,end+1);
}
}
模拟一个将字符串反转。将字符串中指定部分进行反转。
public class Test{
public static void main(String[]
args){
String str ="员序程";
System.out.println(reverse(str,1,3));//程序
System.out.println(reverse(str));//程序员
}
public static String
reverse(String str,int start,int end){
String newStr ="";
for(int
x=end-1;x>=start;x--){
newStr+=str.charAt(x);
}
return newStr;
}
public static String reverse(String
str){
return reverse(str,0,str.length());
}
}
获取一个字符串在另一个字符串中出现的次数 。
public class Test{
public static void main(String[]
args){
String str ="小马KK小马KK小马KK小马";
System.out.println(mySplit(str,"小马"));
}
public static int mySplit(String
str,String key){
int count = 0;
int index = 0;
while((index = str.indexOf(key,index))!=-1){
count++;
index = index+key.length();
}
return count;
}
}
StringBuffer
为了提高字符串的效率,Java就按照面向对象的思想给我们已经封装好了这么一个字符串缓冲区。
StringBuffer是字符串缓冲区,是一个容器。字符串的组成原理就是通过该类实现的。
StringBuffer特点:
1、长度是可以变化的。
2、可以直接操作多个数据类型。
3、StringBuffer可以对字符串内容进行增删。
4、最终会通过toString变成字符串。
常见功能:
1、存储
2、删除
其中:delete(0,s.length())表示清空缓冲区
3、获取
4、修改
5、反转
JDK1.5之后出现StringBuilder
StringBuffer是线程同步的,效率较低,加了锁。
StringBuilder是线程不同步的,适用单线程,用于多线程不安全。
单线程情况下,建议使用StringBuilder可以提高效率,若果需要同步的话可以自己加锁。
Java升级三要素:
1、提高效率。
2、简化书写。
3、提高安全性。
基本数据类型对象封装
基本数据类型对象包装类。
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用。
就是用于基本数据类型和字符串类型之间做转换
基本数据类型转成字符串。基本数据类型+""
基本数据类型.toString(基本数据类型值);
如:Integer.toString(98);//将98整数变成"98";
字符串转成基本数据类型。
xxx a = Xxx.parseXxx(字符串);
静态方法:
int a = Integer.parseInt("123");
静态方法:
double b = Double.parseDouble("12.23");
静态方法:
boolean b = Boolean.parseBoolean("true");
字符串转成基本数据类型。
Xxx a =new Xxx(字符串);
a.xxxValue();
静态方法:
Integer i = new Integer("123");
int num = i.intValue();
十进制转成其他进制。
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制。
Integer.parseInt(string,radix);
/*现在写到这里,现在在做几道练习题,等下会修改,如果我哪里写错了。
请拨打我的电话,13267069621,11点以后别打电话给我,因为我
了*/
/*我的练习题的结果有的和毕老师做的不一样请别见怪啊!我是自己想出来的,想出什么就写出什么。*/
面向对象
当然什么都不用说字符串是一个特殊的对象,想要对字符串进行操作,首先要想到API,字符串是一个复杂的事物,而Java已经用面向对象的想帮我们封装成了对象,方便了我们的操作,所以我们只要找到String,就可以对字符串进行操作了。
Java API文档
String概述:
1、字符串是一个特殊的对象。
2、字符串一旦初始化就不可以被改变。
代码示例:
public class Test{
public static void main(String[]
args){
String
str1 = "程序员";
/*str1是一个类类型变量,"程序员"是一个对象。字符串最大特点:一旦被初始化,就不可以被改变*/
//str1 = "程序员论坛";
/*字符串"程序员" 从未改变,改变的是
str1的指向,str1引用刚才指向"程序员"这个对象,现在又指向"程序员论坛"这个对象*/
String
str2 = new String("程序员");
/*
str1跟str2有什么区别?
str1的"程序员"是一个对象。
str2的"程序员"是一个对象,而new String()又是一个对象。
简单的说str1是一个对象,str2是2个对象。
*/
System.out.println(str1==str2);/*false,因为Java中new出来的是另外一个对象,==号是比较对象的内存地址值是否相同,由于是不同对象,所以结果为false。*/
System.out.println(str1.equals(str2));/*true,因为String类复写了Object类中的equals方法,建立了自己特定的比较方式,String类中比较的是字符串的内容是否相同,俩个都是"程序员"所以结果为true。*/
}
}
字符串的常见操作
String类是用于描述字符串事物。
那么它就提供了对字符串进行操作的多种方法。
常见的操作:
1、获取。
1.1 字符串中的包含的字符数,也就是字符串的长度。
整数 | length()获取字符串的长度。 |
字符 | charAt(int index)获取指定索引处的字符。 |
整数 | indexOf(int ch)获取ch在字符串中第一次出现的位置。 这里接收的是char类型的值。 |
整数 | indexOf(int ch, int fromIndex)获取ch从指定索引开始字符串中第一次出现的位置。 |
整数 | indexOf(String str)获取指定子字符串在此字符串中第一次出现的位置。 |
整数 | indexOf(String str, int fromIndex)获取指定位置开始,str在字符串中出现的第一次位置。 |
整数 | lastIndexOf(int ch)获取ch在字符串最后第一次出现的位置。 |
整数 | lastIndexOf(int ch, int fromIndex)获取ch在字符串最后第一次出现的位置,从指定位置开始。 |
整数 | lastIndexOf(String str)返回指定子字符串在此字符串中最右边出现处的索引。 |
整数 | lastIndexOf(String str, int fromIndex)获取指定位置开始,str在字符串最后出现的第一次位置。 |
public class Test{
public static void main(String[]
args){
String s ="程序员";
for(int x=0;x<s.length();x++){
sop(s.charAt(x));
}
Sop();
int i = 0;
if((i=s.indexOf('马'))!=-1){
for(int
x=++i;x<s.length();x++){
sop(s.charAt(x));
}
sop();
}
}
public static void sop(Object
obj){
System.out.print(obj);
}
public static void Sop(Object
obj){
System.out.println(obj);
}
}
2、判断
布尔型 | contains(CharSequence s)判断字符串中是否包含一个子串,当且仅当此字符串包含指定的 |
[code]布尔型 | isEmpty()判断字符串中是否有内容。原理是判断长度是否为0 |
布尔型 | startsWith(String prefix)判断字符串是否是以指定类容开头。 |
布尔型 | endsWith(String suffix)判断字符串是否是以指定内容结尾。 |
布尔型 | equals(Object anObject)判断字符串内容是否相同。复写Object类的equals方法 |
布尔型 | equalsIgnoreCase(String anotherString)判断内容是否相同,并忽略大小写。 |
public class Test{
public static void main(String[]
args){
String name = "ArrayTool.Java";
Sop(is_Class_File(name));
}
public static boolean is_Class_FileName(String
name){
String fileName = "ArrayTool.Java";
if(name!=null){
if(!name.isEmpty()){//注意:如果字符串没有内容返回的是真,有返回的是假
if(name.endsWith(".Java")){
if(name.startsWith("ArrayTool")){
if(name.equalsIgnoreCase(fileName)){
if(name.equals(fileName)){
return true;
}
}
}
}
}
}
return false;
}
public static void Sop(Object obj){
System.out.println(obj);
}
}
3、转换
3.1将字符数组转成字符串俩种方法:一种是构造函数,一种是静态方法。
构造函数:
构造方法摘要 |
---|
String(char[] value)将字符数组转成字符串。 |
String(char[] value, int offset, int count)将字符数组中的一部分转成字符串。 |
方法摘要 |
---|
字符串 | copyValueOf(char[] data)将字符数组转成字符串。 |
字符串 | copyValueOf(char[] data, int offset, int count)将字符数组中的一部分转成字符串。 |
字符数组 | toCharArray()可以将字符串转成字符串数组。 |
构造方法摘要 |
---|
String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。 |
String(byte[] bytes, int offset, int length)通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。 |
字节数组 | getBytes()将字符串转成字节数组。 |
静态方法:
字符串 | valueOf(boolean b)将布尔型数据转成字符串。 |
字符串 | valueOf(char c)将字符转成字符串。 |
字符串 | valueOf(double d)将double型数据转成字符串。 |
字符串 | valueOf(float f)将float型数据转成字符串。 |
字符串 | valueOf(int i)将int型数据转成字符串。 |
字符串 | valueOf(long l)将long型数据转成字符串。 |
因为基本数据类型和字符串相加结果是字符串。
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4、替换
字符串 | replace(char oldChar, char newChar)将一个新字符替换成一个老字符。 |
字符串数组 | split(String regex)将字符串按照规则切割成一个个小字符串。 |
字符串 | substring(int beginIndex)获取字符串指定位置开始到结束的子串。 |
字符串 | substring(int beginIndex, int endIndex)获取字符串指定位置开始到指定结束的子串。 |
7.1将字符串转成大写或则小写。
字符串 | toUpperCase()将字符串转成大写。 |
字符串 | toLowerCase()将字符串转成小写。 |
字符串 | trim()将字符串前面和后面的空格删除。 |
整数 | compareTo(String anotherString)将字符串按照A-Z,a-z,1-9...自然顺序进行排序。 |
练习:
模拟一个字符串去除空格。
public class Test{
public static void main(String[] args) {
String str ="
程 序 员 ";
System.out.println(trim(str));
}
public static String myTrim(String
str){
int start =0;
int end =str.length()-1;
for(;start<=end && str.charAt(start)==' ';)
start++;
for(;start<=end && str.charAt(end)==' ';)
end--;
return str.substring(start,end+1);
}
}
模拟一个将字符串反转。将字符串中指定部分进行反转。
public class Test{
public static void main(String[]
args){
String str ="员序程";
System.out.println(reverse(str,1,3));//程序
System.out.println(reverse(str));//程序员
}
public static String
reverse(String str,int start,int end){
String newStr ="";
for(int
x=end-1;x>=start;x--){
newStr+=str.charAt(x);
}
return newStr;
}
public static String reverse(String
str){
return reverse(str,0,str.length());
}
}
获取一个字符串在另一个字符串中出现的次数 。
public class Test{
public static void main(String[]
args){
String str ="小马KK小马KK小马KK小马";
System.out.println(mySplit(str,"小马"));
}
public static int mySplit(String
str,String key){
int count = 0;
int index = 0;
while((index = str.indexOf(key,index))!=-1){
count++;
index = index+key.length();
}
return count;
}
}
StringBuffer
为了提高字符串的效率,Java就按照面向对象的思想给我们已经封装好了这么一个字符串缓冲区。
StringBuffer是字符串缓冲区,是一个容器。字符串的组成原理就是通过该类实现的。
StringBuffer特点:
1、长度是可以变化的。
2、可以直接操作多个数据类型。
3、StringBuffer可以对字符串内容进行增删。
4、最终会通过toString变成字符串。
常见功能:
1、存储
缓冲区 | append(boolean b)将 boolean类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(char c)将char 类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(double d)将 double类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(float f)将 float类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(int i)将 int类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(long lng)将 long类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(String str)将 字符串类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | append(StringBuffer sb)将字符串缓存区类型数据的字符串表示形式存储进缓存区。 |
缓冲区 | delete(int start, int end)移除此缓冲区的子字符串中的字符。 |
缓冲区 | deleteCharAt(int index)移除此缓冲区指定位置的字符。 |
3、获取
字符 | charAt(int index)获取指定索引处的字符。 |
整数 | indexOf(String str)获取str在缓冲区中字符串第一次出现的位置。 |
整数 | lastIndexOf(String str)反向获取tr在缓冲区中字符串第一次出现的位置。 |
整数 | length()获取缓冲区字符串长度。 |
字符串 | substring(int start)获取缓冲区字符串的子串。 |
缓冲区 | replace(int start, int end, String str)用新的字符串替换指定位置开始到指定位置结束的字符串。 |
无返回值 | setCharAt(int index, char ch)修改指定索引的字符值。 |
缓冲区 | reverse()将缓冲区字符串倒过来写。 |
StringBuffer是线程同步的,效率较低,加了锁。
StringBuilder是线程不同步的,适用单线程,用于多线程不安全。
单线程情况下,建议使用StringBuilder可以提高效率,若果需要同步的话可以自己加锁。
Java升级三要素:
1、提高效率。
2、简化书写。
3、提高安全性。
基本数据类型对象封装
基本数据类型对象包装类。
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用。
就是用于基本数据类型和字符串类型之间做转换
基本数据类型转成字符串。基本数据类型+""
基本数据类型.toString(基本数据类型值);
如:Integer.toString(98);//将98整数变成"98";
字符串 | toString() 返回一个表示该 Integer值的 String对象。 |
xxx a = Xxx.parseXxx(字符串);
静态方法:
整数 | parseInt(String s) 将字符串的整数数据进行转换。 |
静态方法:
双精度 | parseDouble(String s) 将字符串的双精度数据进行转换。跟 Double类的 valueOf方法一样。 |
静态方法:
布尔值 | parseBoolean(String s) 将字符串的布尔数据进行转换。 |
字符串转成基本数据类型。
Xxx a =new Xxx(字符串);
a.xxxValue();
静态方法:
整数 类型 | valueOf(String s) 获取指定字符串Integer类型数据。 |
int num = i.intValue();
十进制转成其他进制。
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制。
Integer.parseInt(string,radix);
/*现在写到这里,现在在做几道练习题,等下会修改,如果我哪里写错了。
请拨打我的电话,13267069621,11点以后别打电话给我,因为我
了*/
/*我的练习题的结果有的和毕老师做的不一样请别见怪啊!我是自己想出来的,想出什么就写出什么。*/
相关文章推荐
- 黑马程序员 Java面向对象——String类 StringBuffer类 StringBuiler类
- 黑马程序员——Java基础---面向对象(Eclipse、Object类、String类)
- Java中 String类、StringBuilder类、StringBuffer类 区别与如何选择
- Java中String类StringBuffer类和StringBuilder类的区别
- Java中 String类、StringBuilder类、StringBuffer类 区别与如何选择
- java学习路线__面向对象__String类的基本特点__4
- JAVA中String类和StringBuffer类的区别
- JAVA中String类与StringBuffer类的区别
- 黑马程序员_面向对象3_(异常Exception、包package、String类、StringBuffer类)
- java中String类和StringBuffer类实例详解
- 黑马程序员—JAVA基础—String类、StringBuffer类
- Java第5课(可变的String类---StringBuffer类)
- Java基础之String类--String类、StringBuffer类、包装类
- Java学习总结(四)——面向对象(下)(接口,抽象类,内部类,String类等)
- 黑马程序员——Java基础——String类、StringBuffer类、StringBuilder类、基本数据类型对象包装类操作、正则表达式应用
- java 学习 String类 和 StringBuffer类的用法 暑假第九天
- java中如何把String类转成StringBuffer类?` 2010/12/26
- 黑马程序员——Java基础---常用类--Object类,Scanner类,String类,StringBuffer类,StringBuilder类
- java中String类、StringBuffer类、StringBuilder类的区别(未完待续)
- java 学习 String类 和 StringBuffer类的用法 暑假第九天