黑马程序员 Java面向对象——String类 StringBuffer类 StringBuiler类

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


面向对象

当然什么都不用说字符串是一个特殊的对象,想要对字符串进行操作,首先要想到API,字符串是一个复杂的事物,而Java已经用面向对象的思想帮我们封装成了对象,方便了我们的操作,所以我们只要找到String,就可以对字符串进行操作了。

在线查看Java API点就我好

String 概述:

1、字符串是一个特殊的对象

2、字符串一旦初始化就不可以被改变

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()获取字符串的长度。

1.2 根据位置获取位置上某个字符。

字符charAt(int index)获取指定索引处的字符。

1.3 根据字符获取该字符在字符串中位置。

整数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在字符串最后出现的第一次位置。

class Test{

public static void main(String[] args){

String s ="黑马程序员";

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

sop(s.charAt(x));

}

sop("\r\n");

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)
判断字符串中是否包含一个子串,当且仅当此字符串包含指定的 char 值序列时,返回 true。

特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。if(str.indexOf(“aa”)!=-1)而且该方法既可以判断,也可以获取出现位置。

布尔型isEmpty()
判断字符串中是否有内容。原理是判断长度是否为0

布尔型startsWith(String prefix)
判断字符串是否是以指定类容开头。

布尔型endsWith(String suffix)
判断字符串是否是以指定内容结尾

布尔型equals(Object anObject)
判断字符串内容是否相同。复写Object类的equals方法

布尔型equalsIgnoreCase(String anotherString)
判断内容是否相同,并忽略大小写。

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)
将字符数组中的一部分转成字符串。

3.2将字符串转成字符数组。

字符数组toCharArray()
可以将字符串转成字符串数组。

3.3 将字节数组转成字符串。

构造方法
String(byte[] bytes)
         将字节数组转成字符串。

String(byte[] bytes, int offset, int length)
          将字节数组的一部分转成字符串。

3.4 将字符串转成字节数组。

字节数组getBytes()
将字符串转成字节数组。

3.5 将基本数据类型转成字符串。

静态方法:

字符串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)
          将一个新字符替换成一个老字符。

5,切割

字符串数组split(String regex)
          将字符串按照规则切割成一个个小字符串。

6,子串。获取字符串中的一部分。

字符串substring(int beginIndex)
          获取字符串指定位置开始到结束的子串。

字符串substring(int beginIndex, int endIndex)
         获取字符串指定位置开始到指定结束的子串。

7,转换,去除空格,比较。

7.1将字符串转成大写或则小写。

字符串toUpperCase()
将字符串转成大写

字符串
toLowerCase()
          将字符串转成小写

7.2 将字符串两端的多个空格去除。

字符串trim()
          将字符串前面和后面的空格删除。

7.3 对两个字符串进行自然顺序的比较。

整数compareTo(String anotherString) 
          将字符串按照A-Z,a-z,1-9...自然顺序进行排序。

注意:Java获取,开始到结束是包含头不包含尾。

l练习:

模拟一个字符串去除空格。

class Test{

public static voidmain(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);

}

}

模拟一个将字符串反转。将字符串中指定部分进行反转。

class Test{

public static void main(String[] args){

Stringstr = "员序程马黑";

System.out.println(reverse(str,3,5));//黑马

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());

}

}

获取一个字符串在另一个字符串中出现的次数 。

classTest{

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特点: 

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) 
          将字符串缓存区类型数据的字符串表示形式存储进缓存区。

2 删除

缓冲区delete(int start, int end) 
移除此缓冲区的子字符串中的字符。
缓冲区deleteCharAt(int index) 
移除此缓冲区指定位置的字符。
其中:delete(0,s.length())表示清空缓冲区

3 获取

字符charAt(int index) 
        获取指定索引处的字符。
整数indexOf(String str) 
         获取str在缓冲区中字符串第一次出现的位置。
整数lastIndexOf(String str) 
反向获取tr在缓冲区中字符串第一次出现的位置。
整数length() 
       获取缓冲区字符串长度。
字符串substring(int start) 
       获取缓冲区字符串的子串。

4 修改

缓冲区replace(int start, int end, String str) 
          用新的字符串替换指定位置开始到指定位置结束的字符串。
无返回值setCharAt(int index, char ch) 
         修改指定索引的字符值。

5 反转

缓冲区reverse() 
 将缓冲区字符串倒过来写。

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";

字符串toString() 
          返回一个表示该 Integer 值的 String 对象。

字符串转成基本数据类型。

xxx a = Xxx.parseXxx(字符串);

静态方法:

整数parseInt(String s) 
          将字符串的整数数据进行转换。

int a = Integer.parseInt("123");

静态方法:

双精度parseDouble(String s)
          将字符串的双精度数据进行转换。跟 Double 类的 valueOf 方法一样。

double b = Double.parseDouble("12.23");

静态方法:

布尔值parseBoolean(String s)
          将字符串的布尔数据进行转换。

boolean b = Boolean.parseBoolean("true");

字符串转成基本数据类型。

Xxx a = new Xxx(字符串);

a.xxxValue();

静态方法:

整数
类型
valueOf(String s)
          获取指定字符串Integer类型数据。

Integer i = new Integer("123");

int num = i.intValue();


十进制转成其他进制。

toBinaryString();

toHexString();

toOctalString();

其他进制转成十进制。

Integer.parseInt(string,radix);

/*现在写到这里,现在在做几道练习题,等下会修改,如果我哪里写错了。

请拨打我的电话,18903041398,11点以后别打电话给我,因为我睡觉了*/

/*

我的练习题的结果有的和毕老师做的不一样请别见怪啊!我是自己想出来的,想出什么就写出什么。

*/


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值