黑马程序员-字符串

字符串最大的特点是:一旦被初始化就不可以被改变

方法区:方法区,静态区,常量池。

String s =new String();

String s0= "";//两者效果一样,但这个方便,

String s1 =
"abc"//s1是什么?s1是一个类类型变量(应指向对象),"abc"是一个对象,字符串是一个特殊的对象

String s2 = new
Stirng("abc");//存于常量池

System.out.println(s1=s2);//false

System.out.println(s1.equals(s2));//true(覆盖了Object的equals方法),

//String类覆盖了object类中的equals方法,用于判断字符串是否相同,object中的equals方法比较内存地址值

s1和s2有什么区别?面试

;s1在内存中有一个对象

;s2在内存中有两个对象。

常见才操作有哪些?

1.获取

1.1 int length()

1.2 charAt(int
index)

1.3 int indexOf(int ch)
返回ch在字符串中第一次出现的位置。

int indexOf(int ch,int fromIndex)
从制定位置开始索引,第一次出现的字符的位置                
int indexOf(String str)返回的是str在字符串中第一次出现的位置。

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

2.判断

2.1  boolean contains(str)

特殊之处;indexOf(str):索引str第一次出现的位置,如果返回-1,表示字符不存在。也可以判断是否包含

即判断又获取位置:if(str.indexOf("aa")!=-1),该方法也可以判断,有可以获取出现的位置

2.2 字符串中是否有内容 boolean
isEmpty();原理是length是否为零 "" null 的区别 一个是对象,一个指向空

2.3  boolean startsWith(String
prefix)

2.4  boolean endsWith(String
prefix)

2.5  Boolean equals(sts)

2.6  Boolean
equalsIgnoreCase(str)判断内容是否相同,并忽略大小写

3.转换

3.1将字符数组转成字符串

构造函数:String(char[])

String(char[],offset,count);将字符数组中的一部分转成字符。

静态方法:static String copyValue(char[] date);

static String copyValue(char[] date,int,offset);

static String Value(char[] date);与上面的没区别,但是其功能更多

3.2将字符串转成字符数组

char[] toCharArray();可以直接调用,因为字符串是对象

3.3字节数组转成字符串

构造函数:String(byte[])

String(byte[],offset,count)

3.4将字符串转成字节数组

byte[]getBytes()

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

static String valueOf(int,double)

s+"" String valueof(3),结果一样。

4.替换

4.1 String replace(oldchar,newchar);

String replace(CharSequence target,CharSequence replacement)

5.切割

5.String[] split(regex)

6.子串;获取字符串中的一部分

String substring(int begin);

String subsgeing(int begin,int
end);不包含尾。

7.1转换

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

String toUpperCase();

String toLowerCase();

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

String trim();

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

int compareTo(another string)

如果参数字符串等于此字符串,则返回值 0;

如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;

如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

练习1:模拟一个trim,去除字符串两端的空格

思路:通过startWith和endsWith来控制两端的角标。

练习2.将一个字符串进行反转。将字符串中指定部分进行反转

思路:

1.将字符串变成数组

2.对数组进行反转

3.将数组变成字符串

练习3获取一个字符串的出现次数。kk

"abkkcdkkefkkskk"

思路:

1.定义计数器

2.indexOf()获取kk第一次出现的位置,并记住其脚标,返回-1,表示不存在

3.获取KK后面的KK

4.当获取不到时,计数完成

练习4:获取两个字符串中最大相同的子串。abcdhelloabd" "whellom"

public class Demo1 {

/**

* @param args

*/

public static void main(String[] args)
{

String s1="sdfsdfdfdf";

String s2 = "122000";

System.out.println(show(s1,s2));

}

public static String show(String
s1,String s2){

String max=" ";

String min=" ";

max=(s1.length()>s2.length())?s1:s2;

min=(max==s1)?s2:s1;

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

{//尾角标z=s2.length+1时结束。取到最后一个substring(5.6)时,s2.length=5(不包含尾字符),z=6=5+1

for(int y =0,z=min.length()-x;z!=min.length()+1 ;y++,z++ )

{

System.out.println(z);

String temp =
min.substring(y,z);//不包含尾

if(max.contains(temp)){

System.out.println(temp);

return temp;

}    
}            }

return "不存在";//这个return不执行

}

}

StringBuffer是字符缓冲区,是一个容器。特点:

一个容器:

1.长度是可以变化的。

2.可以直接操作多种数据类型。

3.最终会通过tostring()方法变成字符串。

什么时候用:类型不确定,个数不确定。

CURD   create updade read lelete

1.存储

返回值类型StringBuffer 
append();将数据添加到已有数据的[结尾处]。//append都是从结尾处添加

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

2.删除

返回值类型:StringBuffer
delete(start,end):删除缓冲区中的数据,含头不含尾

StringBuffer deleteCharAt(int,index);删除指定位置的字符。

3.获取

返回值类型:StringBuffer charAt(int
index):获取指定索引处的char值

int   indexOf(String,str);获取第一次出现指定的字符串在字符串中的索引

int   indexOf(String str,int
fromindex):从指定位置开始,第一次出现该字符                     
int length():返回长度(字符数)

注意返回值类型String   substring(int
start,int end):返回子串,包含头,不包含尾巴

String  substring(int
start):返回子串,从指定位置到结尾。

4.修改

返回值类型:StringBuffer replace(int start,int
end,String)//从start到end-1,替换成string

注意返回值类型:void    void
setCharAt(int index,char ch);将制定位置的字符设置成ch

5.反转

返回值类型:StringBuffer reversre();

6. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将指定
srcBegin到srcEnd的char[]类型数组,存放到char[] ds中,从char[] ds开始存。

jdk1.5版本之后出现了StringBuilder.

StringBuffer是线程同步。

StringBuilder是线程不同步。

以后开发建议使用StringBuilder.

java 升级三个要素:

1.提高效率

2.简化书写

3.提高安全性

例外;

StringBuffer sb1 = sb.replace(0,5,"b");

//StringBuffer无法获取指定字符和short的索引(没有char和short方法)。

indexOf():(int b = sb.indexOf(‘a‘):错误,int b = sb.indexOf("a"):正确)

练习:

public static void main(String[] args) {

// TODO Auto-generated method stub

StringBuffer sb = new StringBuffer("hellojava");

StringBuffer sb1 = new StringBuffer("java");

show(sb,sb1);

System.out.println(sb+"...."+sb1);

//hellojavajava....java

}

public static void
show(StringBuffer sb1,StringBuffer sb2){

sb1.append(sb2);

sb1=sb2;

sb1=null;

}

JDK1.5之后,出现的新特性。

旧: Integer x = new Integer(4);

新: Integer x= 4;//自动装箱 x是引用数据类型。类类型必然指向对象。

x=x+4;x+4进行自动拆箱。Integer型x变成了int型。和2进行加法运算,再将和进行装箱赋值给x

拆箱过程;x.intValue();           
intValue() 以 int 类型返回该 Integer 的值。

缺点;Integer x= null时,x.intValue(拆箱过程失败),报异常,停掉。要先判断。

Integer m = 128;

Integer n = 128;

m==n//falese

Integer a = 127;

Integer b = 127;

a==b//true;

因为a和b指向了同一个Integer对象。因为当数值在byte范围内,

对于新特性,如果该数值已经存在,则不会开辟新空间.

小知识点:

String s="a";

String s1 ="a";

String s7 ="b";

String s2 = "b"+s;

String s8 = s+"b";

String s3 = new String("ab");//new 新建了一个对象,s3在内存中有两个对象,面试

String s4 = new String("ab");

String s5 = new String("a");

String s6 ="ab";

System.out.println(s2.hashCode()+"...."+s6.hashCode()+".."+s8.hashCode());

System.out.println(s==s1);//ture,指向同一个地址值,只有在没有new的情况下

System.out.println(s==s5);//flase

System.out.println(s2==s3);//有new

System.out.println(s3==s4);//flase,有new

System.out.println(s2==s6);//

System.out.println(s8==s6);flase

//s 和s1相等的原因,s存于常量池中,s1直接引用。

new
String()创建的字符串不放入常量池中,他们有自己的地址空间。

黑马程序员-字符串,布布扣,bubuko.com

时间: 2024-10-13 23:58:56

黑马程序员-字符串的相关文章

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

黑马程序员-C语言基础:数组和字符串

数组:数组的定义注意点 数组初始化正确写法: int args[5] = {1,23,32,4,5}; int args[5] = {12,23}; int args[5] = {[3]=23, [4]=13};//这种写法也可以,直接给其中角标为3和4的赋值 int args[] = {12,23,32};//中括号中没写数组大小,在大括号中一定要写具体数值 int args['A'] = {2,34,5}; 错误写法: int args[];//这样编译器不知道给你开辟多大的内存空间 int

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

【黑马程序员】————数组、字符串

一.  数组的定义 1.      定义 l   声明数组的类型 l   声明数组的元素个数(需要多少存储空间) 2.      格式 元素类型 数组名[元素个数]; 比如:int ages[3]; 3.      简单使用 l   简单初始化:int ages[5] = {19, 19, 20, 21, 25}; l   元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始 l   数组元素的访问:a[i] 4.      初始化 l   初始化方式 int a[3] = {10, 9

黑马程序员—C语言的函数、数组、字符串

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参数名, ... ) {               语句;             return ...         } 3.函数的分类: 根据参数分可以分为  1.有参数函数,2.无参数函           根据返回值分可以分为 1.有返回值函数  2.无返回值函数 4.下面我举一个简单的有

黑马程序员----java基础--String字符串

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.String类概述 java中用String类进行描述对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. String类是final的,也就是说它没有子类. 二.String字符串的特点 1.字符串一旦被初始化就不可以被改变.并且存放在方法区中的常量池中. 1 class StringDemo{ 2 public static

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

黑马程序员------IO(五)

黑马程序员------IO(五) 1.1  操作对象(示例1)ObjectInputStream与ObjectOutputStream 被操作的对象需要实现Serializable. Serializable:用于给被序列化的类加入ID号,用于判断类和对象是否是同一个版本 类通过实现java.io.Serializable接口以启用序列化功能,Serializable只是一个标记接口. 1 示例1: 2 import java.io.*; 3 4 class ObjectStreamDemo 5

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正