【JavaSE】day01_ API文档 、 字符串基本操作

--20150820

1.String及其常用API

1)java中String对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象。这样做的目的是可以最大程度的重用相同内容的字符串以减小系统资源的开销。

2)String常量池

当我们通过字面量,常量来初始化一个字符串时,JVM首先会从字符串的常量池(一个JVM内部维护的内存区域,用来保存已经创建过的字符串对象)中查询用来保存该字符串的对象是否存在,若存在则直接引用,若不存在则创建该字符串对象并存入常量池,然后引用它。因为字符串内容不能改变,所以我们可以放心的重用他们。

3)内存编码及长度

java存储每一个字符均使用2个字节保存,使用的是Unicode编码。并且任何一个字符(无论是英文还是汉字)每个字符的长度都是1。所以字符串的长度就是该字符串所有的字符个数。

int length():返回当前字符串的长度。

例如:

package day01;
/**
 * int lenght()
 * 获取当前字符串中的字符个数(长度),无论是中英文
 * 每个字符占两个字节(Unicode编码)
 * @author soft01
 *
 */

public class StringLengthDemo {
	public static void main(String[] args) {
		String str = "我爱,java";

		System.out.println(str.length()); //7
	}

}

4)indexOf实现检索

int indexOf(int ch):用来检查给定的一个字符在当前字符串中第一次出现的下标位置。这里的下标和数组的下标意思相近,0表示该字符串的第1个字符,以此类推。当该字符串中并不包含给定的字符时,那么该方法返回-1。

例如:

package day01;
/**
 * int indexOf(String str)
 * 查找给定的字符串在当前字符串中第一次出现的位置。
 * 返回值为给定的字符串第一个字符在当前字符串的下标
 * 由于java大小写敏感,所以必须全部匹配上才返回具体下标。否则返回-1
 * @author soft01
 *
 */
public class IndexOfDemo {
	public static void main(String[] args) {

		String str = "thinking in java";

		//检查in的位置
		int index = str.indexOf("in");
		System.out.println(index); //2

		/*
		 * 重载方法:
		 * indexOf(String str,int from)
		 * 从当前字符串指定下标位置开始查找第一次出现
		 * 给定字符串的位置。
		 * 同样的,若没有找到返回-1。
		 */
		index = str.indexOf("in",2); //下标
		System.out.println(index); //2

		index = str.indexOf("in",3);
		System.out.println(index); //5

		/*
		 * int lastIndexOf(String str)
		 * 查找当前字符串中最后一次出现给定字符串的位置。
		 */
		index = str.lastIndexOf("in");
		System.out.println(index); //9

		/*
		 * 实际应用中,常被用作检查一个字符串是否出现
		 * 了要求的关键字,甚至确定位置使用。
		 */

	}

}

5)substring获取子串

String substring(int begin,int end):用来截取当前字符串的部分内容以获取这个子字符串。我们只需要传入两个整数,一个用来表示从哪里开始,另一个用来表示截取到哪里。这里的位置要使用字符串的下标来表示,并且要注意,这两个数字表示的范围是“含头不含尾的”,换句话说就是包含开始下标的字符,但是不包含结束下标的字符。

例如:

package day01;
/**
 * 获取字符串中的部分内容
 * substring(int start,int end)
 * 从指定下标start处对应的字符开始,截取到指定下标end处
 * 之间的字符串,需要注意,不包含end位置的字符。
 * java API中凡是使用2个数字表示一个范围,通常都是"含头不含尾"的。
 *
 * @author soft01
 *
 */
public class SubstringDemo {
	public static void main(String[] args) {
		String str = "www.baidu.com";
		System.out.println(str.length()); //13

		String substr1 = str.substring(4,9);
		System.out.println(substr1); //baidu

		String substr2 = str.substring(4,13); //str.length()-13
		System.out.println(substr2); //baidu.com

		////一个参数,从指定下标到结尾
		String substr3 = str.substring(4);
		System.out.println(substr3); //baidu.com

	}

}

6)trim()

String trim():将字符串两边的空白(空白有很多种,空格是其中之一)去除掉,并将去除后的新字符串返回给我们。

例如:

package day01;
/**
 * String trim()
 * 去除当前字符串中两边的空白
 * @author soft01
 *
 */
public class TrimDemo {
	public static void main(String[] args) {
		String str = "    hello world		";
		System.out.println(str);

		String trim = str.trim();
		System.out.println(trim);
		System.out.println();
	}

}

7)charAt()

char charAt(int index):用于给定一个下标位置,来获取该字符串中这个位置的字符。

例如:

package day01;
/**
 * char charAt(int index)
 * 获取当前字符串中指定位置(下标)对应的字符
 * @author soft01
 *
 */
public class CharAtDemo {
	public static void main(String[] args) {
		String str = "thinking in java";

		char c = str.charAt(0);
		System.out.println(c); //t

	}

}

8)startsWith和endsWith

boolean startsWith(String suffix):用来判断当前字符串是否是以给定的字符串开始的。这里要注意大小写是敏感的。

boolean endsWith(String suffix):用来判断当前字符串是否是以给定的字符串结尾的。

例如我们可以使用endsWith()就可以根据一个文件的名字来判断它是否是以".jpg",".gif"等字符串结尾来得知该文件是否为图片。

例如:

package day01;
/**
 * boolean startsWith(String str)
 * --判断当前字符串是否以给定的字符串开头的
 * boolean endsWith(String str)
 * --判断当前字符串是否以给定的字符串结尾的
 * @author soft01
 *
 */
public class StartsWithDemo {
	public static void main(String[] args) {
		String str = "thinking in java";

		boolean starts = str.startsWith("think");
		System.out.println(starts); //true

		boolean end = str.endsWith("va");
		System.out.println(end); //true

	}

}

9)大小写变换

String toUpperCase():用来将当前字符串中的英文部分的字符全部变为大写后再将新的字符串返回

String toLowerCase():用来将当前字符串中的英文部分的字符全部变为小写后再将新的字符串返回

例如,我们上网时常会要求我们输入验证码,图片中的英文可能是大写的,但我们输入时并不需要严格按照大小写输入却依旧可以验证成功。这就得力于该方法。我们可以将输入的验证码全部转换为大写,在将图片中显示的内容也全部转换为大写后再比较即可。

例如:

package day01;
/**
 * String toUpperCase()
 * String toLowerCase()
 * 将当前字符串中的英文部分转换成全大写和全小写。
 * @author soft01
 *
 */
public class ToUpperCaseDemo {
	public static void main(String[] args) {
		String str = "我爱Java1.8";

		String upper = str.toUpperCase();
		System.out.println(upper);

		String lower = str.toLowerCase();
		System.out.println(lower);

		//通常用来忽略大小写判断(例如验证码判断)

	}

}

10)valueOf()

字符串提供了很多重载的valueOf()方法,可以将其他基本类型的值以字符串的形式描述。

static String valueOf(int i): 返回 int 参数的字符串表示形式

static String valueOf(boolean b): 返回 boolean 参数的字符串表示形式

static String valueOf(char c): 返回 char 参数的字符串表示形式

static String valueOf(double d): 返回 double 参数的字符串表示形式

static String valueOf(char[] c): 返回 char 数组参数的字符串表示形式

static String valueOf(char[] c,int offset,int count): 返回 char 数组参数的特定子数组的字符串表示形式。

static String valueOf(float): 返回 float 参数的字符串表示形式

static String valueOf(long l): 返回 long 参数的字符串表示形式

static String valueOf(Object o): 返回 Object 参数的字符串表示形式

例如:

package day01;
/**
 * static String valueOf()
 * 字符串提供了若干的静态方法valueOf()
 * 作用就是将其他类型转换为字符串。
 * 比较常用的是将基本类型转换成字符串。
 *
 * @author soft01
 *
 */
public class ValueOfDemo {
	public static void main(String[] args) {
		int a = 123;
		String s1 = String.valueOf(a); //"123"
		System.out.println(s1+4); //"1234"
		System.out.println(a+4); //127
		System.out.println(a+""+4); //"1234"

		double d = 123.123;
		String s2 = String.valueOf(d); //"123.123"
		System.out.println(s2+4); //"123.1234"
		System.out.println(d+4); //127.123

		String s3 = 123+""; //没有String.valueOf(a)效率高

	}

}

2. StringBuilder及其常用API

1)StringBuilder封装可变字符串

String类我们已经得知,它是不变对象,那么每当对内容修改时都会引发新对象的创建。那么当我们有一个需求是需要频繁修改字符串时,这样不仅不能减少内存的开销,返回会增加内存的开销。为此java为我们提供了一个专门用于修改字符串内容的类:StringBuilder.

该类封装了可变的字符串,换句话说,当我们需要改变字符串内容时,并不会创建新对象,而是在原对象基础上进行修改。从而减小了内存的开销。

2) StringBuilder常用方法

StringBuilder类的常用方法有:

append(String str):追加字符串;

insert (int dstOffset,String s):插入字符串;

delete(int start,int end):删除字符串;

replace(int start,int end,String str): 替换字符串;

reverse():字符串反转。

3)StringBuilder

StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:return this。

由于改变封装的字符序列后又返回了该对象的引用。可以按照如下简洁的方式书写代码:

buf.append("ibm").append("java").insert(3, "oracle").replace(9, 13, "JAVA");

System.out.println(buf.toString());

4)使用append实现追加

StringBuilder append(String):用于将给定的字符串追加到当前字符串末尾。

5) 使用insert实现插入

StringBuilder insert(int offset, String str):用于将给定的字符串插入到指定的位置。这个位置也是字符串的下标。

6)使用delete实现删除

StringBuilder delete(int start,int end):用于删除给定字符串中的部分内容。需要传入两个参数,描述要删除的字符串的范围,同样这个范围是"含头不含尾的"

7)StringBuilder 总结

StringBuilder是可变字符串。字符串的内容计算,建议采用StringBuilder实现,这样性能会好一些。

java的字符串连接的过程是利用StringBuilder实现的,代码如下所示:

String s = "AB";  String s1 = s + "DE"+1;

String s1 =

new StringBuilder(s).append("DE").append(1).toString();

8)StringBuffer 和StringBuilder的区别:

StringBuffer是线程安全的,同步处理的,性能稍慢;

StringBuilder是非线程安全的,并发处理的,性能稍快

代码演示:

package day01;
/**
 * java.lang.StringBuilder
 * 内部维护一个可变的字符数组。为了解决频繁修改
 * 字符串内容带来的性能损耗。
 * 内部提供了用于编辑字符串的相关方法:
 * 增删改插
 *
 * @author soft01
 *
 */
public class StringBuilderDemo {
	public static void main(String[] args) {
		String str = "努力学习java,为了找个好工作!";

		StringBuilder sb1 = new StringBuilder(); //""
		StringBuilder sb = new StringBuilder(str); //还可以是字符串直接量
		//System.out.println(sb.hashCode());

		/*
		 * 努力学习java,为了找个好工作!然后改变世界!
		 * StringBuilder append(String str)
		 * 在当前字符串末尾追加给定内容
		 */
		sb.append("然后改变世界!");
		str = sb.toString();
		System.out.println(str);
		//System.out.println(sb.hashCode());

		/*
		 * 努力学习java,为了改变世界!
		 * StringBuilder delete(int start,int end)
		 * 删除当前字符串中给定范围内的字符串
		 */
		sb.delete(11,19);
		str = sb.toString();
		System.out.println(str);

		StringBuilder sb2 = sb;

		/*
		 * 努力学习java,就是为了改变世界!
		 * StringBuilder insert(int offset,String str)
		 * 将给定的字符串内容插入到指定位置处
		 */
		sb.insert(9,"就是");
		str = sb.toString();
		System.out.println(str);		

		//System.out.println(sb2==sb);
		//System.out.println(sb2);

		/*
		 * 活着,就是为了改变世界!
		 * StringBuilder replace(int start,int end,String str)
		 * 将当前字符串中给定范围内的字符串替换为给定的字符串
		 */
		sb.replace(0,8,"活着");
		str = sb.toString();
		System.out.println(str);

		/*
		 * 字符串反转
		 */
		sb.reverse();
		str = sb.toString();
		System.out.println(str);

	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-18 17:35:03

【JavaSE】day01_ API文档 、 字符串基本操作的相关文章

JAVASE02-Unit01: API文档 、 字符串基本操作

API文档 . 字符串基本操作 文档注释 package day01; /** * 文档注释只能定义在三个地方: * 类,方法,常量 * * 文档注释是功能注释,用来说明功能作用 * 在类上使用的目的是说明当前类的设计目的 * * @author adminitartor * @version 1.0 * @see java.lang.String * @since JDK1.0 * */ public class DocApiDemo { /** * sayHello方法中的问候语 */ pu

MyEclipse生成java API文档

API文档是提供接口是必须的,如果用word文档,不仅书写起来很麻烦,而且对于使用者来说很不方便.可以使用myEclipse来生成API文档,与java提供的官方API文档一样.一下是详细步骤. /**  * 数据库操作通用程序包  */ package xju.dbhelper; import java.sql.*; /**  * 数据库操作通用接口  * @author xju  * @version 1.0  */ public abstract interface DBHelper {

HighCharts 详细使用及API文档说明

HighCharts 详细使用及API文档说明 2012-11-19 11:18 49574人阅读 评论(2) 收藏 举报  分类: HighCharts 一.HighCharts开发说明: HighCharts开发实际上配置HighCharts每个部分,比如配置标题(title),副标题(subtitle)等,其中每个部分又有更细的参数配置,比如标题下有对齐方式(align),标题文字(text)等.下图为整个图表的每个部分位置说明(请对照下面HighCharts整体结构) 二.HighCha

[笔记&轮子]java源码 生成本地javadoc api文档

在用Eclipse写java代码时候,有时候因为不知道一个java函数的作用,会通过把鼠移动到java函数上,如果它有javadoc的相关内容就会显示出来.但是并非所有java代码都有javadoc:即使安装了javadoc,在eclipse中如果不进行设定,也可能无法使用. 我在win7下安装的是javase的jdk,发现eclipse中默认的javadoc路径是http://download.oracle.com/javase/7/docs/api/,显然这是一个在线资源,问题是网络总是不稳

Core Java 学习笔记——1.术语 环境配置/Eclipse汉化字体快捷键/API文档

今天起开始学习Java,学习用书为Core Java.之前有过C的经验.准备把自己学习这一本书时的各种想法,不易理解的,重要的都记录下来.希望以后回顾起来能温故知新吧.也希望自己能够坚持把自己学习这本书的整个过程记录下来. I want to put a ding in the universe. 基本术语:       Object Oriented Programming——OOP——面向对象编程 Application Programming Interface——API——应用程序编程接

Grunt-jsdoc生成JS API文档

具体的请看官网 https://github.com/krampstudio/grunt-jsdoc 一:首先确保本机电脑上是否已经安装了nodejs和npm.具体安装过程可以看如下: http://www.cnblogs.com/tugenhua0707/p/3497488.html 二: 在安装grunt-jsodc之前,我们先要安装grunt,因此我在F盘下 新建文件夹gruntJSDoc 其中根目录里面新建一个package.json文件,内容如下: { "name": &qu

转: HighCharts 详细使用及API文档说明

一.HighCharts开发说明: HighCharts开发实际上配置HighCharts每个部分,比如配置标题(title),副标题(subtitle)等,其中每个部分又有更细的参数配置,比如标题下有对齐方式(align),标题文字(text)等.下图为整个图表的每个部分位置说明(请对照下面HighCharts整体结构) 二.HighCharts整体结构: 通过查看API文档我们知道HighCharts结构如下:(API文档在文章后面提供下载) var chart = new Highchar

中文Appium API 文档

该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/slate/cn/master/?ruby#about-appium 中文Appium API 文档 第一章:关于appium1.1 appium客户端客户端类库列表及Appium服务端支持 这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的

Java的字体类详解(Font)-摘自Java API文档

字体是个非常平常的概念,以至于看到Java API文档对于字体的长篇大论的说明时,我突然感觉自己很无知. 以下是英文原文: java.awt.Font The Font class represents fonts, which are used to render text in a visible way. A font provides the information needed to map sequences of characters to sequences of glyphs