黑马程序员—JAVA基础—String类、StringBuffer类

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

一、String类的概述和使用

     1多个字符组成的一串数据。

            其实它可以和字符数组进行相互转换。

     2构造方法:

         A:public String()  //空构造

         B:public String(byte[] bytes)//把字节数组转成字符串

        C:public String(byte[] bytes,int offset,int length)//把字节数组的一部分转成字符串

        D:public String(char[] value)//把字符数组转成字符串

        E:public String(char[] value,int offset,int count)/把字符数组的一部分转成字符串

        F:public String(String original)//把字符串常量值转成字符串

Eg

 

<span style="font-family:Arial Black;">/*
 * 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。
 * 通过查看API,可以知道
 * 		A:字符串字面值"abc"也可以看成是一个字符串对象。
 * 		B:字符串是常量,一旦被赋值,就不能被改变。
 */
public class StringDemo {
	public static void main(String[] args) {
		// public String():空构造
		String s1 = new String();
		System.out.println("s1:" + s1);
		System.out.println("s1.length():" + s1.length());
		System.out.println("--------------------------");

		// public String(byte[] bytes):把字节数组转成字符串
		byte[] bys = { 97, 98, 99, 100, 101 };
		String s2 = new String(bys);
		System.out.println("s2:" + s2);
		System.out.println("s2.length():" + s2.length());
		System.out.println("--------------------------");

		// public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
		// 想得到字符串"bcd"
		String s3 = new String(bys, 1, 3);
		System.out.println("s3:" + s3);
		System.out.println("s3.length():" + s3.length());
		System.out.println("--------------------------");

		// public String(char[] value):把字符数组转成字符串
		char[] chs = { 'a', 'b', 'c', 'd', 'e', '爱', '林', '亲' };
		String s4 = new String(chs);
		System.out.println("s4:" + s4);
		System.out.println("s4.length():" + s4.length());
		System.out.println("--------------------------");

		// public String(char[] value,int index,int count):把字符数组的一部分转成字符串
		String s5 = new String(chs, 2, 4);
		System.out.println("s5:" + s5);
		System.out.println("s5.length():" + s5.length());
		System.out.println("--------------------------");
		
		//public String(String original):把字符串常量值转成字符串
		String s6 = new String("abcde");
		System.out.println("s6:" + s6);
		System.out.println("s6.length():" + s6.length());
		System.out.println("--------------------------");
		
		//字符串字面值"abc"也可以看成是一个字符串对象。
		String s7 = "abcde";
		System.out.println("s7:"+s7);
		System.out.println("s7.length():"+s7.length());
	}
}</span>

   3字符串的特点

      A:字符串一旦被赋值,就不能改变。

           注意:这里指的是字符串的内容不能改变,而不是引用不能改变。

     B:字面值作为字符串对象和通过构造方法创建对象的不同

           String s = new String("hello");String s = "hello"的区别?

   4字符串的功能

      A:判断功能

          boolean equals(Object obj) //比较字符串的内容是否相同,区分大小写

          boolean equalsIgnoreCase(String str)//比较字符串的内容是否相同,忽略大小写

          boolean contains(String str)//判断大字符串中是否包含小字符串

          boolean startsWith(String str)//判断字符串是否以某个指定的字符串开头

          boolean endsWith(String str)//判断字符串是否以某个指定的字符串结尾

          boolean isEmpty()//判断字符串是否是空

Eg

 

<span style="font-family:Arial Black;">public class String02 {

	public static void main(String[] args) {
		
		String str1 = "abc";
		String str2 = "ABC";
		System.out.println(str1.equals(str2));
		System.out.println(str1.equalsIgnoreCase(str2));
		System.out.println(str1 + "包含bc吗?" + str1.contains("bc"));
		System.out.println(str1 + "是以a开头吗?" + str1.startsWith("a"));
		System.out.println(str1 + "是空的吗?" + str1.isEmpty());
		String str3 = null;
		System.out.println(str3.isEmpty());
		String str4 = new String();
		System.out.println(str4.isEmpty());
		System.out.println(str4);</span>
		
	}	

}

    B:获取功能

        int length()//获取字符串的长度

        char charAt(int index)//获取指定索引位置的字符

        int indexOf(int ch)//返回指定字符在此字符串中第一次出现处的索引

        int indexOf(String str)//返回指定字符串在此字符串中第一次出现的索引

        int indexOf(int ch,int fromIndex)//返回指定字符在此字符串中从指定位置后第          一次出现处的索引

        int indexOf(String str,int fromIndex)/返回指定字符串在此字符串中从指定位置   后第一次出现处的索引

       String substring(int start)//从指定位置开始截取字符串,默认到末尾

       String substring(int start,int end)//从指定位置开始到指定位置结束截取字符串

Eg

 

<span style="font-family:Arial Black;">/*
 * String类的获取功能
 */
public class StringDemo 1{
	public static void main(String[] args) {
		// 定义一个字符串对象
		String s = "helloworld";

		// int length():获取字符串的长度。
		System.out.println("s.length:" + s.length());
		System.out.println("----------------------");

		// char charAt(int index):获取指定索引位置的字符
		System.out.println("charAt:" + s.charAt(7));
		System.out.println("----------------------");

		// int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
		System.out.println("indexOf:" + s.indexOf('l'));
		System.out.println("----------------------");

		// int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
		System.out.println("indexOf:" + s.indexOf("owo"));
		System.out.println("----------------------");

		// int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
		System.out.println("indexOf:" + s.indexOf('l', 4));
		System.out.println("indexOf:" + s.indexOf('k', 4)); // -1
		System.out.println("indexOf:" + s.indexOf('l', 40)); // -1
		System.out.println("----------------------");

		// 自己练习:int indexOf(String str,int
		// fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。

		// String substring(int start):从指定位置开始截取字符串,默认到末尾。包含start这个索引
		System.out.println("substring:" + s.substring(5));
		System.out.println("substring:" + s.substring(0));
		System.out.println("----------------------");

		// String substring(int start,int
		// end):从指定位置开始到指定位置结束截取字符串。包括start索引但是不包end索引
		System.out.println("substring:" + s.substring(3, 8));
		System.out.println("substring:" + s.substring(0, s.length()));
	}
}</span>

    C:转换功能

       byte[] getBytes()//把字符串转换为字节数组

       char[] toCharArray()//把字符串转换为字符数组

        static String valueOf(char[] chs)//把字符数组转换成字符串

        static String valueOf(int i)//int类型的数据转成字符串

        String toLowerCase()//把字符串转成小写

        String toUpperCase()//把字符串转成大写

        String concat(String str)//把字符串拼接

Eg

 

<span style="font-family:Arial Black;">/*
 * String的转换功能:
 */
public class StringDemo2 {
	public static void main(String[] args) {
		// 定义一个字符串对象
		String s = "JavaSE";

		// byte[] getBytes():把字符串转换为字节数组。
		byte[] bys = s.getBytes();
		for (int x = 0; x < bys.length; x++) {
			System.out.println(bys[x]);
		}
		System.out.println("----------------");

		// char[] toCharArray():把字符串转换为字符数组。
		char[] chs = s.toCharArray();
		for (int x = 0; x < chs.length; x++) {
			System.out.println(chs[x]);
		}
		System.out.println("----------------");

		// static String valueOf(char[] chs):把字符数组转成字符串。
		String ss = String.valueOf(chs);
		System.out.println(ss);
		System.out.println("----------------");

		// static String valueOf(int i):把int类型的数据转成字符串。
		int i = 100;
		String sss = String.valueOf(i);
		System.out.println(sss);
		System.out.println("----------------");

		// String toLowerCase():把字符串转成小写。
		System.out.println("toLowerCase:" + s.toLowerCase());
		System.out.println("s:" + s);
		// System.out.println("----------------");
		// String toUpperCase():把字符串转成大写。
		System.out.println("toUpperCase:" + s.toUpperCase());
		System.out.println("----------------");

		// String concat(String str):把字符串拼接。
		String s1 = "hello";
		String s2 = "world";
		String s3 = s1 + s2;
		String s4 = s1.concat(s2);
		System.out.println("s3:"+s3);
		System.out.println("s4:"+s4);
	}
}</span>

    D:其他功能

       a:替换功能 

           String replace(char old,char new)

          String replace(String old,String new)

       b:去空格功能

            String trim()

       c:按字典比较功能

            int compareTo(String str)

            int compareToIgnoreCase(String str) 

Eg:

<span style="font-family:Arial Black;">public class StringDemo3 {
	public static void main(String[] args) {
		// 替换功能
		String s1 = "helloworld";
		String s2 = s1.replace('l', 'k');
		String s3 = s1.replace("owo", "ak47");
		System.out.println("s1:" + s1);
		System.out.println("s2:" + s2);
		System.out.println("s3:" + s3);
		System.out.println("---------------");

		// 去除字符串两空格
		String s4 = " hello world  ";
		String s5 = s4.trim();
		System.out.println("s4:" + s4 + "---");
		System.out.println("s5:" + s5 + "---");

		// 按字典顺序比较两个字符串
		String s6 = "hello";
		String s7 = "hello";
		String s8 = "abc";
		String s9 = "xyz";
		System.out.println(s6.compareTo(s7));// 0
		System.out.println(s6.compareTo(s8));// 7
		System.out.println(s6.compareTo(s9));// -16
	}
}</span>


二、StringBuffer类

      1概述:

                 字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了 解决这个问题,Java就提供了一个字符串缓冲区类。StringBuffer供我们使用。

      2StringBuffer的构造方法

           A:StringBuffer()

           B:StringBuffer(int size)

          C:StringBuffer(String str)

      3StringBuffer的常见功能

           A:添加功能

          B:删除功能

         C:替换功能

         D:反转功能

         E:截取功能(注意这个返回值)

 

   5面试题

       小细节:

           StringBuffer:同步的,数据安全,效率低。

           StringBuilder:不同步的,数据不安全,效率高。

           A:String,StringBuffer,StringBuilder的区别

           B:StringBuffer和数组的区别?

   6注意的问题:

       String作为形式参数,StringBuffer作为形式参数。

 Eg:

<span style="font-family:Arial Black;">package cn.itcast_StringBuffer

import java.util.Scanner;

/*
 * 判断一个字符串是否是对称字符串
 * 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
 * 
 * 分析:
 * 		判断一个字符串是否是对称的字符串
 * 	        第一个和最后一个比较
 * 		第二个和倒数第二个比较
 * 			...
 * 		比较的次数是长度除以2。
 */
public class StringBufferTest {
	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String s = sc.nextLine();

		// 一个一个的比较
		boolean b = isSame(s);
		System.out.println("b:" + b);
		
		//用字符串缓冲区的反转功能
		boolean b2 = isSame2(s);
		System.out.println("b2:"+b2);
	}
	
	public static boolean isSame2(String s) {
		return new StringBuffer(s).reverse().toString().equals(s);
	}
	

	// public static boolean isSame(String s) {
	// // 把字符串转成字符数组
	// char[] chs = s.toCharArray();
	//
	// for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
	// if (chs[start] != chs[end]) {
	// return false;
	// }
	// }
	//
	// return true;
	// }

	public static boolean isSame(String s) {
		boolean flag = true;

		// 把字符串转成字符数组
		char[] chs = s.toCharArray();

		for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
			if (chs[start] != chs[end]) {
				flag = false;
				break;
			}
		}

		return flag;
	}
}</span>


三、StringBufferStringBuilder/String比较

        A:  StringStringBuffer/Builder区别:

             1、后者相当于容器

              2、字符串拼接 ---- 后者不产生垃圾对象

       B: StringBuffer 与 StringBuilder区别:

            1、 StringBuffer线程安全

             2、 StringBuilder线程不安全

  

-----------android培训java培训、java学习型技术博客、期待与您交流!------------


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值