String类
String类常用方法
方法 | 说明 |
---|---|
int length() | 返回当前字符串的长度 |
int indexOf(int ch) | 查找ch字符在该字符串中第一次出现的位置 |
int indexOf(String str) | 查找str字符串在该字符串中第一次出现的位置 |
int lastIndexOf(int ch) | 查找ch字符在在该字符串中最后一次出现在的位置 |
int lastIndexOf(String str) | 查找str字符串在该字符串中最后一次出现的位置 |
String substring(int beginIndex) | 获取从beginIndex位置开始到结束的字符串 |
String substring(int beginIndex,int endIndex) | 获取从beginIndex位置开始到endIndex位置的字符串 |
String trim() | 返回去除了前后空格的字符串 |
boolean equals(Object obj) | 将该字符与指定对象比较,返回true或false |
String toLowerCase() | 将字符串转换为小写 |
String toUpperCase() | 将字符串转换为大写 |
char charAt(int index) | 获取字符串中指定位置的字符 |
String[] split(String regex,int limit) | 将字符串分割为子字符串,染回字符串数组 |
byte getBytes() | 将该字符串转换为byte数组 |
注意
-
字符串的下标是从0开始的,范围是从0到变量名.length()-1
-
使用indexOf进行字符或者字符串查找时,如果匹配返回位置下标;如果没有匹配结果则返回-1
-
使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符
示例一:
package com;
import org.junit.Test;
import java.util.Arrays;
public class DemoString {
public static void main(String[] args) {
//字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1
String str = "Thisis JAVA 编程";
//打印字符串长度
System.out.println("当前字符串长度:" + str.length());
//查找字符的位置
char c = '编';
System.out.println("当前字符串“编”的位置:" + str.indexOf(c));
//查找JAVA的位置
System.out.println("当前字符串“JAVA”的位置:" + str.indexOf("JAVA"));
//查找“test”的位置,如果不存返回-1
System.out.println("当前字符串中test的位置:" + str.indexOf("test"));
//按空格把字符拆分成一个数组,并输出每个元素
String[] arr = str.split(" ");
System.out.println("按空格把字符拆分成数组:" + Arrays.toString(arr));
//获取索引位置[3,7]之间的子串
//使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符
System.out.println(str.substring(3,7));
}
@Test
public void test(){
/**
* 功能:
* 判断 Java 文件名是否正确
* 判断邮箱格式是否正确。
* 其中:合法的文件名应该以 .java 结尾;
* 合法的邮箱名中至少要包含 “@” ,
* 并要求 “@” 在 “.” 之前
*/
// Java文件名
String fileName = "HelloWorld.java";
// 邮箱
String email = "laurenyang@imooc.com";
//获取文件名中最后一次出现"."号的位置
int index = fileName.lastIndexOf(".");
// 获取文件的后缀
String prefix = fileName.substring(index + 1,fileName.length());
if(index != -1 && index != 0 && prefix.equals("java")){
System.out.println("该文件名正确");
}else{
System.out.println("该文件名不正确");
}
//获取@的位置
int index2 = email.indexOf("@");
//获取.的位置
int index3 = email.indexOf(".");
if (index2 != -1 && index3 > index2){
System.out.println("邮箱格式合法");
}else {
System.out.println("邮箱格式不合法");
}
}
}
“==” 和 equals() 的区别
- ==:判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
- equals():比较存储在两个字符串对象中的内容是否一致
示例二:
/**
* 功能:统计指定字符串中字符 ‘a’ 出现的次数
* 分析:可以通过循环遍历字符串中的每一个字符,判断是否是字符 a ,如果是,则累加统计出现的次数
*/
@Test
public void test2(){
String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";
int sum = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'a'){
sum = sum+1;
//sum++
}
}
System.out.println("字符a出现的次数:"+ sum);
}
StringBuilder类
除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串
String、StringBuffer与StringBuilder的区别
String | StringBuffer | StringBuilder |
---|---|---|
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 | StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 | 可变类,速度更快 |
不可变 | 可变 | 可变 |
线程安全 | 线程不安全 | |
多线程操作字符串 | 单线程操作字符串 |
定义 StringBuilder 类的对象
package com.UsedClass; public class DemoStringBuilder { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder("This is StringBuilder Test"); System.out.println(stringBuilder); } }
StringBuilder 类常用方法
方法 | 说明 |
---|---|
StringBuilder append(参数) | 追加内容到当前StringBuilder对象的末尾 |
StringBuilder insert(位置,参数) | 将内容插入到StringBuilder对象的指定位置 |
String toString() | 将StringBuilder对象转换为String对象 |
int length() | 获取字符串的长度 |
示例:
package com.UsedClass;
public class DemoStringBuilder {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder("This is StringBuilder Test");
//在字符串后面追加字符串
stringBuilder.append("testappend");
System.out.println(stringBuilder);
//在指定位置插入内容
stringBuilder.insert(12,"!!");
System.out.println(stringBuilder);
//转换为String类型
String str = stringBuilder.toString();
}
/**
* 功能:将一个由英文字母组成的字符串转换成指定格式---从右边开始每三个字母用逗号分隔的形式。
*/
public void test(){
// 创建一个空的StringBuilder对象
StringBuilder str = new StringBuilder();
// 追加字符串
str.append("jaewkjldfxmopzdm");
// 从后往前每隔三位插入逗号
for(int i = str.length()-3;i>0;i=i-3){
str.insert(i,',');
}
// 将StringBuilder对象转换为String对象并输出
System.out.print(str.toString());
}
}
包装类
可以像操作对象一样操作基本数据类型
包装类主要提供的两大类方法
- 将本类型和其他基本类型进行转换的方法
- 将字符串和本类型及互相转换的方法
包装类的装箱和拆箱
装箱
-
把基本数据类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
//定义一个int的基本类型 int i = 10; Integer x = new Integer(i);//手动装箱 Integer y = i; //自动装箱
拆箱
-
和装箱相反,把包装类对象转换为基本类型的值,又可分为手动拆箱和自动拆箱
//定义一个Integer类型的包装类对象 Integer i = new Integer(10); int j = i.intValue(); //手动拆箱,转为int类型 int y = i;//自动拆箱,转换为int类型
toString类
-
基本类型转为字符串的方法
//将基本类型转换为字符串 int i =10; String str = Integer.toString(i);//方法一 String str2 = String.valueOf(i);//方法二 String str3 = i + "";//方法三
-
将字符串转为基本类型
//将字符串转为基本类型 String str= "10"; int i = Integer.parseInt(str);//方法一 int j = Ingeger.valueOf(str);//方法二
Data和SimpleDateFormat类
-
SimpleDateFormat 来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。
// 使用format()方法将日期转换为指定格式的文本 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm"); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
format()方法:将日期转换为指定格式的文本
// 创建Date对象,表示当前时间 Date now = new Date(); // 调用format()方法,将日期转换为字符串并输出 System.out.println(sdf1.format(now)); System.out.println(sdf2.format(now)); System.out.println(sdf3.format(now));
-
parse() 方法: 将文本转换为日期
// 使用parse()方法将文本转换为日期 String d = "2014-6-1 21:05:36"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 调用parse()方法,将字符串转换为日期 Date date = sdf.parse(d); System.out.println(date);
Math类
该类所有的方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名
常用方法
返回值 | 方法名 | 解释 |
---|---|---|
long | round() | 返回四舍五入的整数 |
double | floor() | 返回小于参数的最大整数 |
double | ceil() | 返回大于参数的最小整数 |
double | random() | 返回[0,1]之间的随机浮点数 |
示例:
public class HelloWorld {
/**
*功能:定义一个包含 10 个元素的整型数组,通过随机产生 10 以内的随机数,给数组中的每个元素赋值,并输出结果。
*/
public static void main(String[] args) {
// 定义一个整型数组,长度为10
int[] nums = new int[10];
//通过循环给数组赋值
for (int i = 0; i < nums.length; i++) {
// 产生10以内的随机数
int x = (int)(Math.random() * 10);
nums[i] = x;// 为元素赋值
}
// 使用foreach循环输出数组中的元素
for (int num : nums) {
System.out.print(num + " ");
}
}
}