String、字符串缓冲区、基本数据类型包装类


一、字符串

概述:多个字符组成的一个序列,叫字符串。 生活中很多数据的描述都采用的是字符串的。而且我们还会对其进行操作。所以,java就提供了这样的一个类供我们使用。

创建:1、直接赋值;2、new对象形式。

String():无参构造;如:

String s = new String();
s = "hello";
String(byte[] bys):传一个字节数组作为参数;如:
byte[] bys = {7,8,9,10,11};
String s = new String(bys);
String(byte[] bys,int index,int length):把字节数组的一部分转换成一个字符串;如:
byte[] bys = {97,98,99,100,101};
String s = new String(bys,1,2);
String(char[] chs):传一个字符数组作为参数;如:
char[] chs = {'a','b','c','d','e'};
String s = new String(chs);
String(char[] chs,int index,int length):把字符数组的一部分转换成一个字符串;如:
char[] chs = {'a','b','c','d','e'};
String s = new String(chs,1,2);
String(String str):把一个字符串传递过来作为参数;如:
char[] chs = {'a','b','c','d','e'};
String ss = new String(s);
直接把字符串赋值给字符串引用对象(最常用) ;如:
String s = "hello";

注意:字符串一旦被初始化就不能被改变,所谓的改变只是变量指向了不同的对象而已。

如:

String s1 = "abc";

//s1 =  "kk";//这里改变的知识S1的指向,而"abc"并没有改变。

Stirng s2 = new String("abc");//s1和s2是有区别的;s1在内存中只有一个对象啊,s2有两个。

s1==s2 ?==》false

//但是s1.equale(s2) ==》true

//这是因为String复写了Object中的equale方法,用于判断字符串是否相等

String s3 = "abc";

s1==s3 ?==》true 因为s1和s3都指向同一个对象。

常见操作

1、获取

1.1:获取字符串的长度。int  length();

1.2:指定位置的字符。char charAt(int index);

1.3:获取指定字符的位置。如果不存在返回-1,所以可以通过返回值-1来判断某一个字符不存在的情况。

从前面开始

            int  indexOf(int  ch);//返回第一次找到的字符角标

            int  indexOf(int ch,int fromIndex); //返回从指定位置开始第一次找到的角标

            int  indexOf(String str); //返回第一次找到的字符串角标

            int  indexOf(String str,int fromIndex);//fromIndex开始位置

从后面开始

            int  lastIndexOf(int ch);

            int  lastIndexOf(int ch,int fromIndex);

            int  lastIndexOf(String str);

            int  lastIndexOf(String str,int fromIndex);


2、判断

2.1:字符串中包含指定的字符串吗?

            boolean  contains(String substring);

2.2:字符串是否以指定字符串开头啊?

            boolean  boolean startsWith(string);

2.3:字符串是否以指定字符串结尾啊?

            boolean  endsWith(string);

2.4:判断字符串是否相同

            boolean  equals(string);//覆盖了Object中的方法,判断字符串内容是否相同。

2.5:判断字符串内容是否相同,忽略大小写。

            boolean  equalsIgnoreCase(string) ;


3、转换

3.1:通过构造函数可以将字符数组或者字节数组转成字符串。

3.2:可以通过字符串中的静态方法,将字符数组转成字符串。

            static  String  copyValueOf(char[] );

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

            static  String  valueOf(char[]);

            static  String  valueOf(char[],int offset,int count);

3.3:将字符串转成数组。

            char[] toCharArray();//转成字符数组。

            byte[] getBytes();//可以加入编码表。转成字节数组。

3.4:将基本数据类型或者对象转成字符串。(跟用:数据+""一样)

            static  String  valueOf(char);

            static  String  valueOf(boolean);

            static  String  valueOf(double);

            static  String  valueOf(float);

            static  String  valueOf(int);

            static  String  valueOf(long);

            static  String  valueOf(Object);

3.5:将字符串转成大小写。

            String  toLowerCase();//小写

            String  toUpperCase();//大写

4、替换:将字符串进行内容替换。注意:修改后变成新字符串,并不是将原字符串直接修改。

            String  replace(oldChar,newChar);

            String  replace(oldstring,newstring);

5、切割:将字符串转成字符串数组。切割方法。regex可以是字符串,可以是正则表达式

            String[]  split(regex);

6、子串: 获取字符串中的一部分

            String  substring(int start);//从start位开始,到length()-1为止.

            String  substring(int start,int end);//从start开始到end为止。//包含start位,不包含end位。

            String  substring(0,str.length());//获取整串

7、去空格,比较:

           String  trim();//去除字符串两端的空格

            int  compareTo(String);//如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

	public static void method()	
	{
		String s1 = "abcdcaxzcvxef";
		String s2 = "Abcdcaxzcvxef";
		//获取长度
		show("1..."+s1.length());
		//获取值(可以用字符类型)
		show("2..."+s1.charAt(5));//获取角标5的字符
		show("2..."+s1.indexOf(40));//获取ASK码为40的字符,没有,返回-1;
		show("2..."+s1.indexOf(97,3));//从角标3的位置开始获取ASK码为97的字符
		show("2..."+s1.indexOf('c'));//获取字符'c'第一次出现的位置
		show("2..."+s1.indexOf('c',5));//获取字符'c'从角标5的位置后第一次出现的位置
		//判断(一定要用字符串类型,不能用字符类型)
		show("6..."+s1.contains("d"));//是否含有"d"
		show("6..."+s1.isEmpty());//是否有内容
		show("6..."+s1.startsWith("a"));//是否以"a"开头
		show("6..."+s1.endsWith("f"));//是否以"f"结尾
		show("6..."+s1.equalsIgnoreCase(s2));//判断字符串是否相同,不区分大小写。

	}
	public static void method2()	
	{
		String s = "abcdcaxzcvxef";
		char[] arr = {'a','v','d','w','d','s','q'};
		show(new String(arr));//将字符数组转成字符串。
		show(new String(arr,3,3));//指定数组从角标3开始,连续3个字符转成字符串
		Arr(s.toCharArray());//将字符串转换成数组。
		show(s.replace("a","z"));//将字符a替换为字符z
		Arr(s.split("x"));//以x为切割点,分割字符串。

	}
	public static void method3()	
	{
		String s = "      abcdcaxzcvxef        ";
		char[] arr = {'a','v','d','w','d','s','q'};
		show(s.trim());//去除字符串两边空格。
		show(s.substring(5));//获取从角标5开始到最后的子串。
		show(s.substring(2,7));//获取从角标2开始到角标7的子串,不包含角标7的元素。
		show(s.toUpperCase());//把字符串全部变为大写。
		show(s.toLowerCase());//把字符串全部变为小写。
		show(s.trim());
	}

——————————————————————————————————————————————

二、字符串缓冲区

StringBuffer:是一个容器,当数据类型和个数不确定时,而且最红变成字符串的时候使用。

特点:

  1. 是可变长度的。
  2. 缓冲区中可以存储任意类型的数据。
  3. 最终需要通过toString()变成字符串。

CURD:增删改查

create update read delete

增加      修改    读取   删除

1、存储

    StringBuffer  append(data):在缓冲区中追加数据。追加到尾部。

    StringBuffer  insert(index,data):在指定位置插入数据。

2、删除

    StringBuffer  delete(start,end);删除从start至end-1范围的元素

    StringBuffer  deleteCharAt(index);删除指定位置的元素

3、获取(查不到返回-1)

    int  indexOf(string); 返回指定子字符串在此字符串中第一次出现处的索引。

    int  indexOf(string,intfromIndex);从指定位置开始查找字符串

    int  lastIndexOf(string); 返回指定子字符串在此字符串中最右边出现处的索引。

    int  lastIndexOf(string,int fromIndex); 从指定的索引开始反向搜索

    int  length();返回缓冲区长度。

    String  substring(int start,int end)

4、修改

    StringBuffer  replace(start,end,string);将start至end-1替换成string

    void  setCharAt(index,char);替换指定位置的字符

    void  setLength(len);将原字符串置为指定长度的字符串

5、反转

    StringBuffer  reverse();字符串反转

6、将缓冲区中指定数据存储到指定字符数组中

    void  getChars(int srcBegin,int srcEnd,Char[] dst,int dstBegin);

	public static void main(String[] args) 
	{
		StringBuffer sb = new StringBuffer();
		//添加字符串
		sb.append("java01,");
		sb.insert(0,"java02,");//插入
		//sb.append("java03,");
		//sb.append("java04,");
		//sb.append("java05,");
		//sb.append("java06,");
		//sb.append("java07,");
		sop(sb.toString());
		//删除
		//sb.delete(0,sb.length());//清空StringBuffer;
		sb.deleteCharAt(5);//删除角标5的字符。
		//sop(sb.toString());
		//改
		/*
		sb.replace(5,6,"3");
		sop(sb);
		sb.setCharAt(5,'4');
		*/
		sb.reverse();//反转
		char[] ca = new char[15];
		sb.getChars(0,sb.length(),ca,0);// 把字符串的指定子串传到字符数组里面	

	}


JDK1.5出现StringBuiler;

该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用。

方法和StringBuffer一样;

StringBuffer 和 StringBuilder的区别:

StringBuffer线程安全。

StringBuilder线程不安全。

单线程操作,使用StringBuilder 效率高。

多线程操作,使用StringBuffer 安全。


——————————————————————————————————————————————

三、基本数据类型包装类

基本数据类型包装类:是按照面向对象思想将基本数据类型封装成了对象。

好处:

1:可以通过对象中的属性和行为操作基本数据。

2:可以实现基本数据类型和字符串之间的转换。

数据类型         包装类

byte              Byte

short             Short

int                 Integer

long              Long

boolean        Boolean

float              Float

double          Double

char              Character

基本数据类型对象包装类:都有 XXX parseXXX 方法,必须是对应格式。

只有一个类型没有parse方法:Character ;

如:

int i = Integet.parseInt("123");

double d = Double.parseDouble("12.23")


Integer对象

数字格式的字符串转成基本数据类型的方法:

1:将该字符串封装成了Integer对象,并调用对象的方法intValue();

2:使用Integer.parseInt(numstring):不用建立对象,直接类名调用;

 

将基本类型转成字符串:

  1. Integer中的静态方法 String toString(int);
  2. int+"";
将一个十进制整数转成其他进制:

    转成二进制:toBinaryString

    转成八进制:toOctalString

    转成十六进制:toHexString

    toString(int num,int radix);

将其他进制转换十进制:

parseInt(string,radix); //将给定的数转成指定的基数进制;

在jdk1.5版本后,对基本数据类型对象包装类进行升级。

在升级中,使用基本数据类型对象包装类可以像使用基本数据类型一样,进行运算。

    Integer i = newInteger(4); //1.5版本之前的写法;

    Integer i = 4; //自动装箱,1.5版本后的写法;

    i = i + 5;

    //i对象是不能直接和5相加的,其实底层先将i转成int类型,在和5相加。而转成int类型的操作是隐式的。自动拆箱:拆箱的原理就是i.intValue();i+5运算完是一个int整数。如何赋值给引用类型i呢?其实有对结果进行装箱。

Integer a= 127;

Integer b =127;

a==b?==>true

Integer c= 128;

Integer d =128;

c==d?==>false;


    //在装箱时,如果数值在byte范围之内,那么数值相同,不会产生新的对象,也就是说多个数值相同的引用指向的是同一个对象。

	public void test1()
	{
		//加上泛型
		List<Integer> l = new ArrayList<Integer>();
		//自动装箱,把int基本数据类型装箱成Integer包装类
		l.add(1);
		l.add(2);
		l.add(3);
		Iterator<Integer> it = l.iterator();
		while(it.hasNext())
		{
			//自动拆箱,把Integer包装类拆箱成int基本数据类型
			int x = it.next();
			System.out.println(x);
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值