黑马程序员——java基础(字符串、基本类型包装类)

时间:2021-05-15 10:56:13

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


章:java基础(字符串、基本类型包装类)

 


本章概述:

第一部分:String

字符串的获取

字符串的判断

字符串的转换

字符串的替换

第二部分:StringBufferStringBilder

字符串的增删改查

第三部分:基本数据类型对象包装类

基本数据类型和对象的相互转换

 

 




第一部分:String

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

特性

字符串一旦初始化就不能改变,不能改变指的是对象的值不能改变,引用的指向是可变的(字符串存在于常量池中)

Stringfinal类,所以不能继承字符串,不能复写它的方法

Java中凡用""引起来的都是一个字符串对象

String s = "abc""abc"是一个对象 ,String s = new String("abc")存在两个对象,"abc"是一个对象,s是封装了"abc"对象的对象

2、方法:

toString 字符串表示形式

(1)获取   (重要)

int length()  获取长度

char charAt(int index)  根据位置获取字符串某个字符

int indexOf(int ch)  根据char找字符串中出现第一个位置索引

int indexOf(int chint fromIndex)  根据char找字符串中从fromIndex处出现第一个位置索引

int indexOf(String str)  根据String找字符串中出现第一个位置索引

int indexOf(String str)  根据String找字符串中从fromIndex处出现第一个位置索引

int lastIndexOf(···)  根据···找字符串中从fromIndex处出现第一个位置索引

子串

String substring(begin)  获取字符串的一部分

String substring(begin,end)  包含头不包含尾

(2)判断

boolean contains(charSquence ch)  是否包含某一个字符串

特殊之处:

可以索引str第一次出现的位置,如果返回-1,则不存在

所以也可以判断是否包含

boolean stratWith(str)  是否以参数str开始

boolean endWith(str)  是否以参数str结束

boolean isEmpty()  判断字符串是否为空(判断长度是否为零)

boolean equalsstr比较两个字符串的值

boolean equalsIgnoreCase()  忽略大小写比较

(3)转换

字符数组转成字符串

构造函数:

String(char[] arr)

String(char[] arr,offset,count)  将一部分转成字符串

static String copyValueOf(char[])

static String copyValueOf(char[])

static String copyValueOf(char[]),offset,count)

static String ValueOf(char[])  

字节数组转成字符串

构造函数:

String(byte[])  将byte数组转成字符串,使用平台默认编码  

String(byte[],offset,count)  将byte数组中特定元素转成字符串(默认编码)

字符串转成字节数组

byte[] getBytes

基本数据类型转成字符串

static String valueOf(int)  int类型转成字符串

static String valueOf(double)  double类型转成字符串

大小写转换

String toUppeCase()  转成大写


String toLowerCase()  转成小写

字符串和字节数组转换,可以指定编码表

(4)替换

String replace(oldChar,newChar)  将字符串中所有符合oldChar的字符串替换成newChar

String replaceAll(regex,replacement)  将符合正则规则的字符串替换成指定元素

切割

String[] split(regex)   用匹配正则规则的字符串切割String,返回切割后的数组

去除空格

String trim()  去除字符串头尾处的空格

比较

int compareTo (String)  按自然顺序比较

字符串练习:(为便于翻阅,不宜赘写,章后自行练习)

模拟一个trim方法去除字符串两端的空格

将字符串反转

计算字符串中子串出现的位置

获取两个字符串中最大的子串


代码示例:

<pre name="code" class="java">/*
需求:String示例
*/


//封装了主函数的类
class  StringDemo
{
	//主函数
	public static void main(String[] args)
	{
		//两种方式创建String对象
		String s = "abcdefg";
		String str = new String("abcdefg");

		//调用自定义的打印方法
		sop("s.length:"+s.length());    //打印s字符串对象的长度
		sop("s to index2:"+s.charAt(2)); //获取字符串2角标处的字符并打印
		sop("efg 4 str:"+str.indexOf("efg"));  //获取子串在字符串中出现的位置的索引
		sop("fromIndex:"+str.indexOf("f",2));  //从角标2开始查找字符串"f"
		sop("substring:"+s.substring(1,4));    //获取角标1到4(不包含4)的子字符串

		sop("contains 2 bc:"+s.contains("bc"));   //判断是否包含"bc"
		sop("contains 2 bd:"+s.contains("bd"));   //注意虽然s中包含"b"和"d",但没有连在一起的"bd"字符串
		sop("startWith:"+str.startsWith("abc"));  //是否以"abc"开头
		sop("endWith:"+str.endsWith("g"));   //是否以"g"结尾
		sop("isEmpty:"+str.isEmpty());   //是否为空
		sop("s equals str:"+s.equals(str));  //比较s和str的值是否相等,比较字符串不能用“==”,要用这个String复写的equals方法


		//定义一个字符数组
		char[] ch = {'H','e','l','l','o',' ','W','o','r','l','d'};

		String tostr = new String(ch);  //将char数组中的元素转成字符串

		sop("ch 2 str:"+tostr);  //打印字符串
		sop("subch 2 str:"+new String(ch,6,5));  //从char数组的角标6位置向后取5位的字符(包含角标6)转成字符串
		sop("getBytes:"+s.getBytes());  //将字符串转成字节数组,打印的是数组地址值
		sop("bytes 2 str:"+new String(s.getBytes()));  //将字节数组转换成字符串
		
		//定义一个int数据,一个double数据
		int x = 110;

		sop(String.valueOf(x));  //基本数据类型转成字符串

		sop("大写:"+tostr.toUpperCase());  //将字符串中的英文转成大写
		sop("小写:"+tostr.toLowerCase());  //转成小写
		sop("replace:"+tostr.replace("World","Java"));  //把HelloWorld中的World替换成Java
		sop("replaceAll:"+tostr.replaceAll("[l]","i"));  //把HelloWorld中的“l”都变成“i”
		sop("compareTo:"+s.compareTo(str));  //比较s和str的大小,相等则返回0
		
		String[] strs = tostr.split("o");  //用“o”将tostr字符串切割成字符串数组
		
		//遍历打印字符串数组
		for (int i = 0;i<strs.length ;i++ )
		{
			sop(strs[i]);
		}

		//去除字符串两端的空格
		String str2 = "       a b  c def   ";
		sop("split:"+str2.trim());  //打印去除空格后的字符串


	}

	//为了简化代码的书写,定义一个专门用于打印的函数
	public static void sop(Object obj)
	{
		//打印传进来的对象
		System.out.println(obj);
	}
}

 
 

 

第二部分:StringBuffer和StringBilder

StringBuffer

StringBuffer是一个字符串缓冲区,是一个存储字符串的容器

特点:

StringBuffer内的字符串的长度是可变化的

提供的方法可以直接操作多个数据类型

最终会通过toString方法返回字符串

(1)增:

StringBuffer append(""):将指定数据添加到已有数据的结尾处,返回的是同一个对象

StringBuffer insert(index,"")  将数据从Index(索引)处插入到StringBuffer中

(2)删:

StringBuffer delete(start,end)  删除缓冲区中的数据,包含start,不包含end

SringBuffer deleteCharAtIndex删除指定位置的数据

(3)改

StringBuffer replace(start,end,String)  替换字符串中的部分

StringBuffer reverse()  反转字符串

void setCharAt(index,char)  替换单个字符

(4)查:

char charAt(index)

int indexOf(String)

int lastIndexOf(String)

int length()

String substring(start,end)

void getChars(srcStart,srcEnd,[]dst,dstBegin)  从StringBuffer中获取一段字符串存入已有的char数组的指定位置

代码示例:

/*
需求:StringBuilder(StringBuffer)示例
*/


//封装了主函数的类
class  StringBuilderDemo
{
	//主函数
	public static void main(String[] args)
	{
		//创建一个StringBuilder,初始化传入一个字符串
		StringBuilder sb = new StringBuilder("Zhang san");
		
		//打印StringBuilder
		sop(sb);

		//增:
		//添加一个字符串
		sb.append("Li si1");
		sop(sb+"  添加后");  //打印sb

		//在索引9的位置插入字符串
		sb.insert(9,"Wangwu");
		sop(sb+"  插入后");  //打印

		//删:
		sb.delete(9,15);  //删除第10到15个元素(9是索引)
		sop(sb+"  删除后");  //打印
		sb.deleteCharAt(sb.length()-1);  //把最后一个字符删掉
		sop(sb+"  删一个字符");  //打印

		//改:
		sb.replace(9,sb.length(),"Zhao liu");  //把Li si替换成Zhao liu
		sop(sb+"  替换后");
		sb.setCharAt(sb.length()-1,'n');  //注意了大家,这个方法不返回值,替换完就完事儿了
		sop(sb+"  替换一个字符");
		sop(sb.reverse()+"  反转");  //反转字符串
		sb.reverse();  //再反转回去

		sop(sb.charAt(0)+" 查找的第一个索引的字符");  //查找索引处的字符
		sop(sb.indexOf("Zhao")+"  “Zhao”的索引");  //查找“Zhao”的位置,返回一个字符的索引
		sop(sb.lastIndexOf(" “san”的索引"));  //查找“san”的位置,返回最后一次出现的索引
		sop(sb.substring(9,sb.length())+"取出一段");  //取出sb的第10个到最后一个字符的子串

	}

	//为了简化代码的书写,定义一个专门用于打印的函数
	public static void sop(Object obj)
	{
		//打印传进来的对象
		System.out.println(obj);
	}
}


StringBuilder

StringBuilder在JDK1.5出现,将线程安全的StringBuffer替换

StringBuilder的操作和方法和StringBuffer基本一致

两者的最大区别是StringBuffer是线程同步的,而StringBuilder是线程不同步的,但StringBuilder的效率比StringBuffer高,所以一般情况下建议使用StringBuilder

Java升级围绕三大目的:

(1)提高效率

(2)简化书写

(3)提高安全性

 





第三部分:基本数据类型对象包装类

1、基本数据类型也是一种事物,将基本数据类型封装成对象,有利于对基本数据的描述,可以利用对象的方法对基本数据进行操作

2、基本数据类型和它们所对应的包装类:

int --> Integer

字段:

MAX_VALUE  获取int类型数据可以表示的最大整数值

MIN_VALUE  获取int类型数据可以表示的最小整数值

long --> Long

...

short --> Short

byte --> Byte

double --> Double

float --> Float

char --> Character

boolean --> Boolean

3、最常见的作用是用于基本数据类型和字符串之间的转换

(1)基本数据类型转String

基本数据类型+""

基本数据类型.toString(基本数据)

char的对象.toUpperCase(int char)  将int数据转成其在ACSII码中对应的字符

......

toBinaryString(int) 将int数据转成他对应的二进制形式的字符串

......

String转基本数据类型

int parseInt(String)  字符串转成十进制int整数

parseInt(String,进制) 字符串表示的任意进制整数转成任意进制的整数

parseLong 字符串转成long型的整数

parse...

intValue:对象Integer转成int

equals:复写了方法,比较的是值,返回的是boolean值

compareTo  在数值上比较两个包装类对象的大小,返回的是自然顺序的差(int值)


代码示例:

/*
需求:基本类型包装类示例
*/


//封装了主函数的类
class  IntegerDemo
{
	//主函数
	public static void main(String[] args)
	{
		//打印int的最大最小值
		sop("int 的最大值:"+Integer.MAX_VALUE);
		sop("int 的最小值:"+Integer.MIN_VALUE);

		int x = 12345;

		sop(Integer.valueOf(x));  //将int类型转成Integer对象类型
		sop(Integer.toBinaryString(x));  //将x转成二进制的字符串表示形式
		sop(Integer.parseInt("2015"));  //将字符串“2015”转成int类型的数值
		sop(Integer.parseInt("abc",16));  //第二个参数表示该字符串表示的数值的进制,将其转成(十进制的)基本类型的数值
	}

	//为了简化代码的书写,定义一个专门用于打印的函数
	public static void sop(Object obj)
	{
		//打印传进来的对象
		System.out.println(obj);
	}
}


JDK1.5

自动拆装箱

当数值在byte范围内时,如果数值已存在,则不会开辟新空间(用到了享元设计模式)


 

本章总结:

1、字符串是我们最常用的数据类型,是学习中需要重点掌握的知识点,字符串的操作涉及到查找、替换、转换、和判断,其中有对数组、字符和字符串的各种转换操作以及对字符串的分割、插入、去除元素、替换字符等,需要我们,多加练习,熟悉掌握。

2、基本数据类型包装类是用来将基本数据类型封装成对象描述的类,将基本数据类型封装成对象的好处是可以用面向对象的思想操作基本数据类型,用方法对其进行修改和转换等动作,也是对计算机数据描述的一种重要方式。

3、这些对数据的操作重点是要掌握其操作思想,熟悉对它们方法的调用,才能在编程的时候游刃有余。

 


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------