毕向东Java视频学习笔记【Day15 字符串+StringBuffer+StringBuilder类基础】

.01 string类特点

String类的特点:

字符串对象一旦被初始化就不可以被改变。

面试题

String s = “abc”;

String s1 = NEW String (“abc”);

System.out.println(s==s1); 输出false表示这两个字符串地址是不是相等的,为什么?

答:第一个是在字符串常量池中创建了abc字符串并且赋给了引用型变量s

第二个是在堆内存中用new的方式创建了string对象 并且在new的时候接受了一个字符串abc

(创建两个对象一个new一个字符串对象在堆内存中)

第一个产生一个对象

第二个产生两个对象

在常量池中是可以被共享的  而第二个不能共享

String类中的equals复写object中的equals建立了string类自己判断字符串相同的方法

其实就是比较字符串内容

package day15;
public class StringDemo {
	public static void main(String[] args) {
		/*
		 * String类的特点:
		 * 字符串对象一旦被初始化就不会被改变。
		 */
		stringDemo1();
		System.out.println();
		stringDemo2();
	}
	public static void stringDemo2() {
		// TODO Auto-generated method stub

		String s = "abc";//创建一个字符串对象在常量池中。
		String s1 = new String("abc");//创建两个对象一个new一个字符串对象在堆内存中。
		System.out.println(s==s1);//false
		System.out.println(s.equals(s1));//true
		//string类中的equals复写Object中的equals建立了string类自己的判断字符串对象是否相同的依据。
		//其实就是比较字符串内容。
	}
	/*
	 * 演示字符串定义的第一种方式,并明确字符串常量池的特点.
	 * 池中没有就建立,池中有,直接用。
	 */
	private static void stringDemo1() {
		String s = "abc"; //"abc"存储在字符串常量池中。
		String s1 = "abc";
		System.out.println(s==s1);//true
	}

}

.02string
类  构造函数

package day15;

public class StringConstructorDemo {

	public static void main(String[] args) {
		stringConstructorDemo2();
	}

	private static void stringConstructorDemo2() {
		char[] arr = {'w','a','p'};
		String s2 = new String(arr);
		System.out.println("s2="+s2);
	}

	public static void stringConstructorDemo(){
		@SuppressWarnings("unused")
		String s = new String();//等效于stirng s = "";不等string s = null;
		byte[] arr ={65,66,67,68};
		String s1 = new String(arr);
		System.out.println("s1="+s1);
	}
}

.03String类常见方法 获取

/*

* 按照面向对象的思想对字符串进行功能分类。

* "abcd"

*

* 1,获取:

* 1.1 获取字符串中字符的个数(长度).

* int length();

* 1.2 根据位置获取字符。

* char charAt(int index);

* 1.3 根据字符获取在字符串中的第一次出现的位置.

* int indexOf(int ch)

* int indexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置

* int indexOf(String str);

* int indexOf(String str,int fromIndex);

*  根据字符串获取在字符串中的第一次出现的位置.

* int lastIndexOf(int ch)

* int lastIndexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置

* int lastIndexOf(String str);

* int lastIndexOf(String str,int fromIndex);

* 1.4 获取字符串中一部分字符串。也叫子串.

* String substring(int beginIndex, int endIndex)//包含begin不包含end。

* String substring(int beginIndex);

*

*

*

* 2,转换。

* 2.1 将字符串变成字符串数组(字符串的切割)

* String[]  split(String regex):涉及到正则表达式.

* 2.2 将字符串变成字符数组。

* char[] toCharArray();

* 2.3 将字符串变成字节数组。

* byte[] getBytes();

* 2.4 将字符串中的字母转成大小写。

* String toUpperCase():大写

* String toLowerCase():小写

* 2.5  将字符串中的内容进行替换

* String replace(char oldch,char newch);

* String replace(String s1,String s2);

* 2.6 将字符串两端的空格去除。

* String trim();

* 2.7 将字符串进行连接 。

* String concat(string);

*

* 3,判断

* 3.1 两个字符串内容是否相同啊?

* boolean equals(Object obj);

* boolean equalsIgnoreCase(string str);忽略大写比较字符串内容。

* 3.2 字符串中是否包含指定字符串?

* boolean contains(string str);

* 3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。

* boolean startsWith(string);

* boolean endsWith(string);

*

* 4,比较。

*

*/

对字符串进行方法处理以后,他会赋给一个新的字符串 不再是之前那一个字符串的地址(不再是之前那个字符串常量池中的字符串)

package day15;

public class StringMethodDemo {
	public static void main(String[] args) {

		stringMethodDemo_4();

//		System.out.println("abc".concat("kk"));
//		System.out.println("abc"+"kk");

//		System.out.println(String.valueOf(4)+1);
//		System.out.println(""+4+1);

	}

	private static void stringMethodDemo_4() {

		System.out.println("abc".compareTo("aqz"));
	}

	@SuppressWarnings("unused")
	private static void stringMethodDemo_3() {
		String s = "abc";
		System.out.println(s.equals("ABC".toLowerCase()));
		System.out.println(s.equalsIgnoreCase("ABC"));

		System.out.println(s.contains("cc"));

		String str  = "ArrayDemo.java";

		System.out.println(str.startsWith("Array"));
		System.out.println(str.endsWith(".java"));
		System.out.println(str.contains("Demo"));
	}

	@SuppressWarnings("unused")
	private static void stringMethodDemo_2() {

		String  s = "张三,李四,王五";
		String[] arr = s.split(",");

		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}

		char[] chs = s.toCharArray();

		for (int i = 0; i < chs.length; i++) {
			System.out.println(chs[i]);
		}
		s = "ab你";
		byte[] bytes = s.getBytes();
		for (int i = 0; i < bytes.length; i++) {
			System.out.println(bytes[i]);
		}

		System.out.println("Abc".toUpperCase());

		String s1 = "java";
		String s2 = s1.replace('q', 'z');
		System.out.println(s1==s2);//true

		System.out.println("-"+"    ab  c    ".trim()+"-");

	}

	@SuppressWarnings("unused")
	private static void stringMethodDemo_1() {

		String  s = "abcdae";

		System.out.println("length:"+s.length());//6
		System.out.println("char:"+s.charAt(2));//c//StringIndexOutOfBoundsException
		System.out.println("index:"+s.indexOf('k'));//0//-1 我们可以根据-1,来判断该字符或者字符串是否存在。
		System.out.println("lastIndex:"+s.lastIndexOf('a'));//4

		System.out.println("substring:"+s.substring(2,4));
	}

}

注意:System.out.println("index:"+s.indexOf(‘k‘));//0//-1 我们可以根据-1,来判断该字符或者字符串是否存在。返回-1,该字符不存在

String Buffer类

* StringBuffer:就是字符串缓冲区。 用于存储数据的容器。

* 特点:

* 1,长度的可变的。

* 2,可以存储不同类型数据。

* 3,最终要转成字符串进行使用。

* 4,可以对字符串进行修改。

*

* 既然是一个容器对象。应该具备什么功能呢?

*

*  1,添加:

*   StringBuffer append(data);

*   StringBuffer insert(index,data);

*

*  2,删除:

*   StringBuffer delete(start,end):包含头,不包含尾。

*   StringBuffer deleteCharAt(int index):删除指定位置的元素

*

*  3,查找:

*   char charAt(index);

*   int indexOf(string);

*   int lastIndexOf(string);

*

*  4,修改:

*   StringBuffer replace(start,end,string);

*   void setCharAt(index,char);

*

*  增删改查 C(create)U(update)R(read)D(delete)

*/

.

package day15;
public class StringBufferDemo {
	public static void main(String[] args) {
		bufferMethodDemo_2();
	}
	private static void bufferMethodDemo_2() {
		StringBuffer sb = new StringBuffer("abce");
		// sb.delete(1, 3);//ae
		// 清空缓冲区。
		// sb.delete(0,sb.length());
		// sb = new StringBuffer();
		// sb.replace(1, 3, "nba");
		// sb.setCharAt(2, 'q');
		// sb.setLength(10);
		// System.out.println("sb:"+sb);
		// System.out.println("len:"+sb.length());
		System.out.println(sb.reverse());
	}
	@SuppressWarnings("unused")
	private static void bufferMethodDemo_1() {
		StringBuffer sb = new StringBuffer("abce");

		// sb.append("xixi");
		sb.insert(2, "qq");

		System.out.println(sb.toString());
	}
	public static void bufferMethodDemo() {
		// 创建缓冲区对象。
		StringBuffer sb = new StringBuffer();
		sb.append(4).append(false);// .append("haha");
		sb.insert(1, "haha");
		// sb.append(true);
		System.out.println(sb);
	}
}

String Builder类

/*

* jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder

*

* 不同的是:

* StringBuffer是线程同步的。通常用于多线程。

* StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。

*

* jdk升级:

* 1,简化书写。

* 2,提高效率。

* 3,增加安全性。

*/

时间: 2024-07-30 09:29:09

毕向东Java视频学习笔记【Day15 字符串+StringBuffer+StringBuilder类基础】的相关文章

毕向东Java视频学习笔记【Day09 继承+接口+抽象类】

Java_Day09 继承+接口+抽象类 构造函数 子父类中的构造函数特点. 在子类构造对象时,发现访问子类构造函数时,父类也运行了. 为什么呢? 因为:在子类的构造函数中第一行有一个默认的隐式语句 super() 子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参构造函数. 在每个子类构造函数中,都有一个隐式的super()调用父类空参构造函数. 如果想输出22行内容,必须在29行改为super(5),这样可以访问到父类带参数的构造函数. 为什么子类实例化的时候会访问到父类的构造函

毕向东Java视频学习笔记

2016年6月6日开始学JAVA    Java_Day01 JVM:虚拟机 JRE:JAVA运行环境  (JVM+类库) JDK:JAVA开发工具包(JRE+JAVA的开发工具) cd..返回上一层 cd\ 返回根目录 md  新建文件夹 del 删除文件夹 rd  删除文件夹 cls 清屏 set 显示windows所有环境变量 环境变量的使用: JAVA_HOME=F:\JAVA JDK Path=%JAVA_HOME%\bin  //javac.exe的目录 javac执行一次变成cla

毕向东Java视频学习笔记【Day11-Day13 多线程】

Java_Day12 多线程01 进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以多执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代码. 每一个线程都有自己运行的内容.这个内容可以称为线程要执行的任务. 多线程好处:解决了多部分同时运行的问题. 多线程的弊端:线程太多回到效率的降低. 其实应用程序的执行都是cpu在做着快速的切换完成的.这个切换是随机的. JVM启动时就启动了多个线程,至少有两个线程

致敬毕向东java视频

大一: 转专业之前在网易云公开课看过麻省理工的线代收益颇多, 大二上学期: 在网易云上看了阿发的c,反复看了五六遍,感觉不难又总感觉少点什么,后来看了好斌(优秀的专科老师)豁然开朗,看了两遍.好斌的数据结构也是不错,因为没有这样的培训机构 后面在群里的好朋友耿彬彬(专科老师,人生第一个师傅)那里得到了王宝明(传智播客c)视频,如获至宝.看了两边,指针后面的草草结尾,可惜这个时候半年已过. 大二下学期: 开学前一周开始配java环境,深刻知道什么时间该做什么事,天下视频一大抄,但是好坏不一样,从c

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Java集合类学习笔记(各种Map实现类的性能分析)

HashMap和Hashtable的实现机制几乎一样,但由于Hashtable是一个古老的.线程安全的集合,因此HashMap通常比Hashtable要快. TreeMap比HashMap和Hashtable要慢(尤其在插入.删除key-value对时更慢),TreeMap中的key-value总是处于有序状态,无需专门进行排序操作. LinkedHashMap比HashMap慢一点,因为它需要维护链表来保持Map中key-value时的添加顺序. IdentityHashMap采用与HashM

韩顺平视频学习笔记-简易qq

1 package myclient; 2 3 import java.net.*; 4 import java.util.Date; 5 import java.text.SimpleDateFormat; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.io.*; 9 import java.awt.*; 10 11 import javax.swing.*;

Android(java)学习笔记205:网易新闻客户端应用编写逻辑过程

1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容. 例如如下的网易RSS订阅: 2.由于我们这

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com