字符串的特点

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

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

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

String s = new String(“hello”)和String s = “hello”;的区别?

  前者会创建2个对象,后者创建1个对象。字符串字面量就是一个对象,用new多此一举。

  

  ==:比较引用类型比较的是地址值是否相同

  equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同

public class StringDemo2 {
	public static void main(String[] args) {
		String s1 = new String("hello");
		String s2 = "hello";

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

/*

 * 看程序写结果

 * 字符串如果是变量相加,先开空间,在拼接。

 * 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。

 */

public class StringDemo4 {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "world";
		String s3 = "helloworld";
		System.out.println(s3 == s1 + s2);// false
		System.out.println(s3.equals((s1 + s2)));// true

		System.out.println(s3 == "hello" + "world");// true
		System.out.println(s3.equals("hello" + "world"));// true

	}
}

/*

 * String类的判断功能:

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

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

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

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

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

 * boolean isEmpty():判断字符串是否为空。

 * 

 * 注意:

 * 字符串内容为空和字符串对象为空。

 * String s = "";//有对象,但是值为空

 * String s = null;//对象都不存在,所以不能调用方法

 */

/*

 * String类的获取功能

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

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

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

 * 为什么这里是int类型,而不是char类型?

 * 原因是:'a'和97其实都可以代表'a',这样传int类型和char类型都行,更方便

 * 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):从指定位置开始到指定位置结束截取字符串。

 */

//需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数
public class StringTest2 {
	public static void main(String[] args) {
		//定义一个字符串
		String s = "Hello123World";

		//定义三个统计变量
		int bigCount = 0;
		int smallCount = 0;
		int numberCount = 0;

		//遍历字符串,得到每一个字符。
		for(int x=0; x<s.length(); x++){
			char ch = s.charAt(x);

			<span style="color:#ff0000;">//判断该字符到底是属于那种类型的
			if(ch>='a' && ch<='z'){
				smallCount++;
			}else if(ch>='A' && ch<='Z'){
				bigCount++;
			}else if(ch>='0' && ch<='9'){
				numberCount++;
			}</span>
		}

		//输出结果。
		System.out.println("大写字母"+bigCount+"个");
		System.out.println("小写字母"+smallCount+"个");
		System.out.println("数字"+numberCount+"个");
	}
}

/*

 * String的转换功能:

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

 * char[] toCharArray():把字符串转换为字符数组。

 * static String valueOf(char[] chs):把字符数组转成字符串。

 * static String valueOf(int i):把int类型的数据转成字符串。

 * 注意:String类的valueOf方法可以把任意类型的数据转成字符串。

 * String toLowerCase():把字符串转成小写。

 * String toUpperCase():把字符串转成大写。

 * String concat(String str):把字符串拼接,使用+号方便

 */

需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
	String str2 = "listenToMusic";
		System.out.println(str2.substring(0, 1).toUpperCase()+str2.substring(1).toLowerCase());

/*

 * String类的其他功能:

 * 

 * 替换功能:

 * String replace(char old,char new)

 * String replace(String old,String new)

 *

 * 去除字符串两空格

 * String trim()

 * 

 * 按字典顺序比较两个字符串  

 * int compareTo(String str)

 * int compareToIgnoreCase(String str)

a.compareTo(b);返回0则a==b;返回值>0则a>b,返回值<0则a<b

 */

/*
 * 统计大串中小串出现的次数
 * 举例:
 * 		在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"
 * 结果:
 * 		java出现了5次
 *
 * 分析:
 * 		前提:是已经知道了大串和小串。
 *
 * 		A:定义一个统计变量,初始化值是0
 * 		B:先在大串中查找一次小串第一次出现的位置
 * 			a:索引是-1,说明不存在了,就返回统计变量
 * 			b:索引不是-1,说明存在,统计变量++
 * 		C:把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大串
 * 		D:回到B
 */
public class StringTest4 {
	public static void main(String[] args) {
		// 定义大串
		String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
		// 定义小串
		String minString = "java";

		// 写功能实现
		int count = getCount(maxString, minString);
		System.out.println("Java在大串中出现了:" + count + "次");
	}

	/*
	 * 两个明确: 返回值类型:int 参数列表:两个字符串
	 */
	public static int getCount(String maxString, String minString) {
		// 定义一个统计变量,初始化值是0
		int count = 0;

		// 先在大串中查找一次小串第一次出现的位置
		int index = maxString.indexOf(minString);

		// 索引不是-1,说明存在,统计变量++
		while (index != -1) {
			count++;
			// 把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大串
			int startIndex = index + minString.length();
			maxString = maxString.substring(startIndex);
			// 继续查
			index = maxString.indexOf(minString);
		}

		return count;
	}
}

Java之String类型详解的更多相关文章

  1. Java中String类型详解

    这篇博客是我一直想总结的,这两天一直比较忙,先上传下照片吧,过后有时间再弄成正常的. 本文主要是对Java中String类型的总结,包括其在JVM中是怎么存储的...

  2. C++之string类型详解

    C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...

  3. Java的String类详解

    Java的String类 String类是除了Java的基本类型之外用的最多的类, 甚至用的比基本类型还多. 同样jdk中对Java类也有很多的优化 类的定义 public final class S ...

  4. Java中Date类型详解

    一.Date类型的初始化 1. Date(int year, int month, int date); 直接写入年份是得不到正确的结果的. 因为java中Date是从1900年开始算的,所以前面的第 ...

  5. Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.

    1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...

  6. 【转】Java魔法堂:String.format详解

    Java魔法堂:String.format详解     目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六. ...

  7. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  8. java 复习整理(四 String类详解)

    String 类详解   StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上S ...

  9. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

随机推荐

  1. [NOI 2011]阿狸的打字机

    Description 题库链接 给你 \(n\) 个单词, \(m\) 组询问,每组询问形同 \((x,y)\) ,询问 \(x\) 串在 \(y\) 串中出现多少次. \(1\leq n,m\le ...

  2. [SDOI2011]计算器

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  3. [HNOI2011]任务调度

    题目描述 有 N 个任务和两台机器 A 与 B.每个任务都需要既在机器 A 上执行,又在机器 B 上执行, 第 i 个任务需要在机器 A 上执行时间 Ai,且需要在机器 B 上执行时间 Bi.最终的目 ...

  4. Go学习——go+channel实战(转)

    转载:http://studygolang.com/articles/2423 背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Be ...

  5. 4517: [Sdoi2016]排列计数

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  6. localStorage存储数组以及取数组方法

    var weekArray = ['周一'.'周二'.'周三'.'周四'.'周五']; //存: localStorage.setItem('weekDay',JSON.stringify(weekA ...

  7. David MacKay:用信息论解释 '快速排序'、'堆排序' 本质与差异

    这篇文章是David MacKay利用信息论,来对快排.堆排的本质差异导致的性能差异进行的比较. 信息论是非常强大的,它并不只是一个用来分析理论最优决策的工具. 从信息论的角度来分析算法效率是一件很有 ...

  8. Linux文件管理笔记

    1)Linux识别磁盘:Linux通过不同的设备节点区分各个分区,节点名字的由磁盘名加分区号组成.例如,驱动器/dev/hba上的第一个分区叫做/dev/hba1,驱动器/dev/sdc上的第七个分区 ...

  9. Java网络爬虫Hello world实现——Httpclient爬取百度首页

    1.创建Maven项目 2.Httpclient Maven地址 <dependency> <groupId>org.apache.httpcomponents</gro ...

  10. AJAX 向后台发送带 List 集合的对象

    现有基类: public class School { int name; int address; List<Student> students = new ArrayList<S ...