——String类,StringBuffer类,StringBuilder类的简述和操作。

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

String类

   字符串类同于描述字符串事物。如姓名等。

   字符串是一个特殊的对象

   字符串一旦初始化就不可以被改变,即一个字符串常量。

   字符串是常量;它们的值在创建之后不能更改。

   字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

   例如:

     String str = "abc";

   等效于:

     char data[] = {'a', 'b', 'c'};

     String str = new String(data);

     即,此处有4个对象。

   String s1 = "abc"//s1是一个类类型对象,"abc"是一个对象。

   s1 = "kk"。此时改变的不是"abc"对象,而是str所执行的对象地址。

   String s2 = new String("abc");

   s1 与 s2的区别。

   s1在内存中有一个对象。

   s2在内存中有两个对象。

   注:String类是一个终类,即不能被继承。



  String类常见的操作:

     1,获取:

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

    int length()--获取长度。

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

char charAt(int index)

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

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

--从fromIndex指定的位置开始,获得ch在字符串中出现的位置。

int indexOf(char ch,int fromIndex)

--返回的是str在字符串中第一次出现的位置。

int indexOf(String str)

--从fromIndex指定的位置开始,获得str在字符串中第一次出现的位置。

int indexOf(String str,int fromIndex)

--获得字符串中最后一个字符(也可以是字符串)ch出现的位置

int lastIndexOf(char ch)。


     2,判断:

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

boolean contains(String str)

特殊之处:indexOf(String str):可以索引str第一次出现的位置,如果返回-1表示str不在字符串中。

所以,也可以用于判断字符串中是否包含指定的子串。

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

且该方法既可以判断,也可以获取子串出现的位置。

2.2,字符串中是否有内容。

boolean isEmpty():原理是判断字符串长度是否为0.(1.6版本后才有)

2.3,字符串是否是一指定内容开头。

boolean startWith(String str)

2.4,字符串是否是一指定内容结尾。

boolean endWith(String str)

2.5,判断字符串内容是否相等,覆写了Object类中的toString()方法。

boolean equals(String str)

2.6,判断字符串内容是否相等,并忽略大小写。

boolean equalsIgnoreCase(String str)

     3,转换:

3.1,将字符串数组转成字符串。

构造函数:
String(char[])

//将字符数组中的从offset位置的count个字符转成字符串。

String(char[] chs,int offset,int count)

静态方法:

//返回指定数组中表示该字符序列的 String。

static String copyValueOf(char[] chs);

//返回指定数组中一部分表示该字符序列的 String。

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

static String valueOf(char[] chs);

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

char[] toCharArray();

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

String(byte[] bs)

//将字节数组中的一部分转成字符串

String(byte[] bs,int offset,int count)

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

byte[] getBytes();

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

static String valueOf(int)

static String valueOf(double)
.
.
.
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

     4,替换:

4.1String replace(oldchar,newchar);

    5,切割:

5.1String[] split(String str);

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

//从begin开始截取到字符串末尾。

6.1String substring(int begin);

//从begin位置开始截取到end-1.

6.2String substring(int begin,int end);包含头,不包含尾。!!



     7,大小写转换,取出空格,比较。

7.1,大小写转换

    //转成大写

    String toUpperCase();

    //转成小写
    String toLowerCase();

7.2,将字符串两端空格去掉。

    String trim();

7.3,对两个字符串进行字典比较

    //区分大小写比较

    String compareTo(String str);

    //不区分大小写比较

    String compareToIgnoreCase(String str);

示例代码:

package com.itheima.stringdemos;

import java.util.Arrays;

/**
 * 字符串中常用操作的测试类
 * @author wuyong
 *
 */
public class StringTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		String str = "abcsfgae3";
		sop("=================获取=================");
		
//		1.1,字符串中包含的字符数,也就是字符串的长度。
		sop(str.length());
		
//     	1.2,根据位置获取位置上的某个字符。
		sop(str.charAt(3));
		
//     	1.3,根据字符获取在字符串中的位置。
		sop("f的位置--" + str.indexOf('f'));
		
//     	从fromIndex指定的位置开始,获得ch在字符串中出现的位置。
		sop("e的位置--" + str.indexOf('e', 3));
		
//     	--返回的是str在字符串中第一次出现的位置。
		sop("cs的位置--" + str.indexOf("cs"));
		
//     	--从fromIndex指定的位置开始,获得str在字符串中第一次出现的位置。
		sop("bc的位置--" + str.indexOf("bc",4));
		
//     	--获得字符串中最后一个字符(也可以是字符串)ch出现的位置
		sop("最后a的位置--" + str.lastIndexOf('a'));
		
		
		sop("=================判断=================");
//		2.1,字符串中是否包含某一个子串
		sop("fg是否存在--" + str.contains("fg"));
		
//		2.2,字符串中是否有内容。
		sop("str是否为空字符串--" + str.isEmpty());
		
//		2.3,字符串是否是一指定内容开头。
		sop("str是否已12开头的位置--" + str.startsWith("12"));
		
//		2.4,字符串是否是一指定内容结尾。
		sop("字符串str是否以es结尾--" + str.endsWith("es"));
		
//		2.5,判断字符串内容是否相等,覆写了Object类中的toString()方法。
		sop("字符串str是否等于asd--" + str.equals("asd"));
		
//		2.6,判断字符串内容是否相等,并忽略大小写。
		sop("str忽略大小写是否等于abcsFGaE3--" + str.equalsIgnoreCase("abcsFGaE3"));
		
		sop("=================转换=================");
		
//		3.1,将字符串数组转成字符串。
		char[] chs = {'a','2','s','e'};
		String chsStr = new String(chs);
		sop("构造函数下chsStr--" + chsStr);
		
//			//将字符数组中的从offset位置的count个字符转成字符串。
		chsStr = new String(chs,2,2);
		sop("多参构造函数chsStr--" + chsStr);
//		静态方法:
			sop("copyValueOf(char[] chs)方法chsStr--" + String.copyValueOf(chs));
			
			sop("copyValueOf(char[] chs,off,count)chsStr--" + String.copyValueOf(chs,1,2));
			
			sop("valueOf==chsStr--" + String.valueOf(chs));
			
//	3.2,将字符串转成字符数组。
			char[] chs2 = chsStr.toCharArray();
			for (char c : chs2) {
				sop(c);
			}
			
//	3.3,将字节数组转换成字符串。
		byte[] bs = {98,49,112,97};
		sop("String(byte[] bs) --" + new String(bs));;
		
//		//将字节数组中的一部分转成字符串
		sop("String(byte[] bs,off,count) --" + new String(bs,0,3));
		
//	3.4,将字符串转成字节数组
		byte[] bs2 = new String(bs).getBytes();
		for (byte b : bs2) {
			sop(b);
		}
		
//	3.5,将基本数据类型转成字符串。
		sop(String.valueOf(3));
		sop(String.valueOf(12.45));
//		.
//		.
//		.
//		特殊:字符串和字节数组在转换过程中,是可以指定编码的
	}
	
	/**
	 * 自定义输出方法,封装了System.out.println()语句
	 * @param obj
	 */
	public static void sop(Object obj) {
		System.out.println(obj);
	}

}

StringBuffer

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

  线程安全的可变字符序列。
  特点:

1,其长度是可以变化的。

2,可以操作多个数据类型。

3,最终或通过toString方法变成字符串。



  通常会有一下操作:

1,C create 增加

2,U update 修改
3,R read   查看
4,D delete 删除

  1,存储:

1,初始化时的,传入参数可以存储。new StringBuffer(形参)

2,StringBuffer append(形参);将指定数据作为参数添加到数据结尾处。

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


  2,删除:

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

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

  3,获取:

char charAt(int index):获取指定位置的字符

int indexOf(String str):获取指定字符串的位置

int lastIndexOf(String str):获取指定字符串的最后出现的位置

int length():获取缓冲区的长度。

String substring(int start,int end):获取字符串中start开始到end位置的子串。

  4,修改:

StringBuffer repalce(int start,int end,String str);将start位置到end位置替换成str字符串。

void setChartAt(int index,char ch):将指定位置的子符替换成ch。

  5,反转:

StringBuffer reverse():反转。

StringBuffer与StringBuilder的区别和关系:

    StringBuilder:

StringBuilder是JDK1.5新加的功能,目的在于提高对字符串的操作的效率。

   区别:

    1,StringBuffer在多线程时,线程安全的可变字符序列,但是由于同步的原因,每次都要判断锁,所以效率较低。

    2,StringBuilder 是线程不安全的,但是效率比StringBuffer高,开发中优先使用它。

   关系:

StringBuilder提供了与StringBuffer提供了兼容的功能。

示例代码:

package com.itheima.stringdemos;


/**
 * StringBuffer的相关操作
 * @author wuyong
 *
 */
public class StringBufferTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		sop("--------------存储----------------");
		buffer_add();
		sop("--------------删除----------------");
		buffer_del();
		sop("--------------获取----------------");
		buffer_get();
		sop("--------------修改----------------");
		buffer_modify();
		sop("--------------反转----------------");
		buffer_reverse();
	}
	/**
	 * 存储
	 */
	private static void buffer_add() {
		//初始化时添加数据
		StringBuffer sb = new StringBuffer("abc");
		
		//用append方法添加到数据末尾。
		sb.append('t').append(true).append(123);
		
		//用insert方法将指定值插入到指定位置。
		sb.insert(2, "QQ");
		sop("存储--》sb == " + sb);
	}
	/**
	 * 删除
	 */
	public static void buffer_del() {
		StringBuffer sb = new StringBuffer("abcdefg123345");
		sop("删除前--》" + sb);
		
		sb.delete(2, 5);
		sop("delete(int start,int end):删除后--》" + sb);
		
		sb.deleteCharAt(8);
		sop("deleteCharAt(int index):删除后--》" + sb);
		
		//清空StringBuffer
		sop("清空后的长度--》" + sb.delete(0, sb.length()).length());
	}
	/**
	 * 获取
	 */
	public static void buffer_get() {
		StringBuffer sb = new StringBuffer("abcdefag123345");
		sop("sb是--》" + sb);
		//char charAt(int index);获取指定位置的字符
		sop("下标为2的字符是--》" + sb.charAt(2));
		
		//int indexOf(String str):获取指定字符串的位置
		sop("字符串“123”的开始位置是--》" + sb.indexOf("123"));
		
		//int lastIndexOf(String str):获取指定字符串的最后出现的位置
		sop("最后一个a出现的位置是--》" + sb.lastIndexOf("a"));
		
		//int length():获取缓冲区的长度。
		sop("sb的长度是--》" + sb.length());
		
		//String substring(int start,int end):获取字符串中start开始到end位置的子串。
		sop("sb中下标2到6的字符串是--》" + sb.substring(2, 6));
	}
	
	/**
	 * 修改
	 */
	public static void buffer_modify() {
		StringBuffer sb = new StringBuffer("abcde");
		sop("sb在替换前--》" + sb);
		
		sop("sb调用repace替换后是--》" + sb.replace(1, 3, "12"));
		
		sb.setCharAt(0, 'W');
		sop("sb调用setCharAt替换后是--》" + sb);
	}
	
	/**
	 * 反转
	 */
	public static void buffer_reverse() {
		StringBuffer sb = new StringBuffer("12345");
		sop("sb反转前是--》" + sb);
		
		sop("sb反转后是--》" + sb.reverse());
	}
	
	/**
	 * 自定义的输出的方法
	 * @param obj
	 */
	public static void sop(Object obj) {
		System.out.println(obj);
	}
}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 
发布了25 篇原创文章 · 获赞 4 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章