黑马程序员--Java基础--String

------- android培训 java培训 、期待与您交流! ----------

第一部分:String概述

1、String类的定义是:public static class String

final说明String没有子类,它的功能不能被覆写。

2、

String str = "abc";
String str1 = new String("abc");
a、以上代码有什么区别?

第一句在内存中创建了一个对象String类对象"abc"。

第二句在内存中创建了两个对象,一个是通过new创建的,另一个是"abc"。

b、

str==str1 返回false,原因:==比较的引用变量str和str1的内存地址值,它俩是不相等的。

str.equals(s2) 返回true,原因:因为String类覆写了Object类的equals方法,定义了自己的独特内容,该方法用于判断字符串内容是否相同。

3、解读:String s1 = "abc";

s1是一个引用类型变量,"abc"是一个对象

4、字符串最大特点:一旦被初始化,就不能改变。

例子:

String s1 = "abc";
s1 = "kk";
输出s1结果为kk。

原因:s1变量存储的地址变了,指向了kk对象内容,而"abc"还继续留在内存中。

5、内存中有一个常量池,里面是一个数组,存放a等字符。


第二部分:String的常见功能

String类是适合于描述字符串常量,那么它就提供了多个方法对字符串进行操作。

那么常见的操作有:

1、获取

1.1、字符串中的包含的字符数,也就是字符串的长度

int length():获取长度

		String str = "abcdefakpf";
		System.out.println(str.length());

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

char charAt(int index)

System.out.println(str.charAt(4));//当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException

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

int indexOf(int ch):返回的是ch在字符串中第一次出现的位置,ch为字符的ASCII值

		String s1 = "abc";
		int ch = s1.indexOf(97);
		System.out.println(ch);//输出0

int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位

int indexOf(String str):返回的是str在字符串中第一次出现的位置

System.out.println(str.indexOf('a'));//如果没有找到,返回-1

int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置

int lastIndexOf(int ch):返回字符从右边开始数起第一次出现的位置

2、判断

2.1、字符串中是否包含某一个字串

boolean contains(String str)

特殊之处:indexOf(str):可以返回str第一次出现位置,如果返回-1,表示该str不再字符串中存在,所以,也可以用于对指定字符串判断是否包含。

if(str.indexOf("aa")!=-1)

而且该方法,既可以判断又可以获取出现的位置

如果只是判断,用contains,如果既要判断又要获取位置,用indexOf

2.2、字符中是否有内容

boolean isEmpty()

2.3、字符串是否是以指定内容开头

boolean startsWith(String str);

2.4、字符串是否是以指定内容结尾

boolean endsWith(String str);

2.5、判断字符串内容是否相同。复写Object的方法

boolean equals(str)

2.6、判断内容是否相同,并忽略大小写

boolean equalsIgnoreCase(String str)


3、转换

3.1、将字符数组转换成字符串

构造函数:String(char[])

String(char[],offset,count):将字符数组中的一部分转成字符串,offset是起始位,count是个数。

这是经常使用的办法

new String(buf,0,len);

静态方法:

static String copyValueOf(char[])

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

static String valueOf(char[])

3.2、将字符串转换成字符数组(重点)

char[] toCharArray()

		String s1 = "zxshidhif";
		char[] chs = s1.toCharArray();
		for(int i = 0;i<chs.length;i++)
		{
			System.out.println(chs[i]);
		}

3.3、将字节数组转换成字符串(重点)

String(byte[])

String(byte[],offset,count):将字符数组中的一部分转成字符串,offset是起始位,count是个数

3.4、将字符串转成字节数组(重点)

byte[] getBytes()

		String s1 = "abc";
		byte[] by = s1.getBytes();
		for(int i = 0;i<by.length;i++)
		{
			System.out.print(by[i]+" ");
		}
输出结果

</pre><pre name="code" class="plain">97 98 99 

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

String valueOf(int)

String valueOf(double)

注:3+""也能将int型转换成字符串型,也 可以写成 String.valueOf(3)

特殊:字符串和字节数组在转换过程中,是可以指定编码表的


4、替换

String replace(char oldchar,char newchar)。这个方法返回的是一个新的字符串,原有的字符串不会发生改变。

		String s = "hello java";
		String s1 = s.replace('a','n');
		String s2 = s.replace('q','n');//如果要替换的字符不存在,返回的还是原串
		String s3 = s.replace("java","world");//输出hello world
		System.out.println("s="+s);//输出 hello java
		System.println("s1="+s1);//输出 hello jnvn

5、切割

String[] split(String regex)

		String s = "zhangsan,lisi,wangwu";

		String[] arr = s.split(",");
		for(int i = 0;i<arr.length;i++)
		{
			System.out.pritnln(arr[i]);//输出zhangsan lisi wangwu
		}

6、子串。获取字符串中的一部分。这个方法返回的也是新的字符串,原有字符串不会发生改变。而且截取范围包头不包尾!

String substring(int beginIndex)

String substring(int beginIndex,int endIndex)

		String s = "abcdef";
		sop(s.substring(2));//输出cdef。如果角标不存在,会发生字符串角标越界异常
		sop(s.substring(2,4));//输出cd 包含头,不包含尾。s.substring(0,s.length())

7、转换、去除空格、比较

7.1 将字符串转成大写或者小写

String toUpperCase()

String toLowerCase()

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

String trim()  

String s = "   hello Java    ";
System.out.println(s.trim());//输出"hello Java"

应用:邮箱登录时输入了空格,使用函数可以忽略空格

7.3 对两个字符串进行自然顺序(ASCII码值)的比较(重点)

int compareTo(String)

		String s1 = "acc";
		String s2 = "aaa";
		System.out.println(s1.compareTo(s2));//返回2,因为c的ASCII值是99,a是97,相减后得2


第三部分:字符串String的练习

需求:找出两个字符串的相同的最大子串

	public static String getMaxSubString(String str1,String str2)
	{
		String max = "",min = "";
		max = (str1.length()>str2.length())?str1:str2;
		min = (max==str1)?str2:str1;
		for(int x = 0; x<min.length(); x++)
		{
			for(y = 0,z=min.length()-x;z!=min.length()+1;y++,z++)
			{
				String temp = min.substring(y,z);//substring方法是包含头不包含尾
				if(max.contains(temp))//if(str1.indexOf(temp)!=-1)
					return temp;
			}
		}
	}

第四部分:StringBuffer

1、StringBuffer概述

StringBuffer是字符串缓冲区,是一个容器。

特点:

a、长度是可以变化的

b、可以操作多个数据类型

c、最终会通过toString方法变成字符串


什么时候用?

当数据类型不确定,而且最终变成字符串,并且数据个数不确定。


2、方法:

1)存储

StringBuffer append():将指定的数据类型作为参数添加到已有数据的结尾处。这个方法不会返回新的缓冲区。

StringBuffer sb = new StringBuffer();
sb.append(64);
sop(sb.toString());//输出64

这个可以使用方法调用链

sb.append("abc").append(true).append(34);//方法调用链,因为append返回的还是同一对象

StringBuffer insert(index,数据):可以将数据插入到指定index位置。

2)删除

StringBuffer delete(start,end):删除缓冲区的数据,包含头不包含尾。

StringBuffer deleteCharAt(index):删除指定位置的字符

3)获取

char charAt(int index)

int indexOf(String str) 

int length()

int lastIndexOf(String str)

String substring(int start) 

4)修改

StringBuffer replace(int start, int end, String str)

void setCharAt(int index, char ch) 

		StringBuffer sb = new StringBuffer("abcde");
		sb.replace(1,4,"java");//输出ajavae
		sb.setCharAt(2,"k");
		sop(sb.toString());//输出ajkvae

5)反转

StringBuffer reverse();

6)将缓冲区里的指定字符存储到字符数组中

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 包头不包尾


第五部分:StringBuilder

1、在jdk1.5之后出现了StringBuilder。

2、StringBuffer和StringBuilder的区别

StringBuffer是线程同步的:一次只能一个人对其进行操作。

StringBuilder是线程不同步的:如果是单线程的话,使用StringBuilder效率会高。

以后开发建议使用StringBuilder

升级三个因素:
1、提高效率
2、简化书写
3、提高安全性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值