Java实用类
- String类的常用方法
- String类概述
- String类常用方法
- StringBuffer类和StringBuilder类
- 使用StringBuffer类处理字符串
- 使用StringBuilder类处理字符串
- Sting类、StringBuffer类及StringBuilder类对比
- 日期操作类
- Random类
String类的常用方法
String类概述
在Java中,字符串被作为String类型的对象来处理。String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。创建String对象的方法如以下代码所示:
String s=“Hello World”;
或者
String s=new String(“Hello World”);
String类提供了许多有用的方法。例如,获得字符串的长度、对两个字符串进行比较、连接两个字符串以及提取一个字符串中的某一个部分等。可以使用String类提供的方法来完成对字符串的操作。
String类常用方法
(1)求字符串长度length()
调用length()方法的语法格式如下:
字符串.length()
length()方法返回字符串的长度。
示例一:注册新用户,要求密码长度不能小于6位。
代码展示:
import java.util.Scanner;
public class Register {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String uname,pwd;
System.out.print("请输入用户名:");
uname = sc.next();
System.out.print("请输入密码:");
pwd = sc.next();
if (pwd.length() >= 6) {
System.out.println("注册成功!");
} else {
System.out.println("密码长度不能小于6位!");
}
}
}
输出结果:
(2)字符串比较
字符串比较的语法格式如下:
字符串1.equals(字符串2);
比较两个字符串的值是否相同,返回值为boolean类型,如果相同,则返回真值,否则返回假值。
示例二:注册成功后,实现登录验证。用户名为“TOM”,密码为“1234567”。
分析如下:在使用equals()方法比较两个字符串时,它逐个字符比较组成两个字符串的每个字符是否相同。如果都相同,则返回真值,否则返回假值。对于字符的大小写,也在检查范围之内。
代码展示:
import java.util.Scanner;
public class Register {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String uname,pwd;
System.out.print("请输入用户名:");
uname = sc.next();
System.out.print("请输入密码:");
pwd = sc.next();
if (uname.equals("TOM") && pwd.equals("1234567")) {
System.out.println("登录成功!");
} else {
System.out.println("用户名或密码错误,登录失败!");
}
}
}
输出结果:
示例三:实现会员注册,要求用户名长度不小于3,密码长度不小于6,注册时两次输入密码必须相同 。
代码展示:
import java.util.Scanner;
public class ZhuCE {
public static void main(String[] args) {
String name;
String mima1;
String miam2;
boolean flag=false;
do {
System.out.println("***欢迎进入注册系统***");
Scanner sc = new Scanner(System.in);
System.out.print("请输入用户名:");
name = sc.next();
System.out.print("请输入密码:");
mima1 = sc.next();
System.out.print("请再次输入密码");
miam2 = sc.next();
if (name.length() < 3 || mima1.length() < 6 || miam2.length() < 6) {
System.out.println("用户名长度小于3,密码长度不能小于6!");
flag = false;
} else if (!mima1.equals(miam2)) {
System.out.println("两次密码输入不相同!");
flag = false;
} else {
flag = true;
}
}while (flag==false);
System.out.println("注册成功,请记住密码!");
}}
输出结果:
(3)字符串拼接
字符串拼接的语法格式如下:
字符串1.concat(字符串2);
字符串2被拼接到字符串1的后面,返回拼接后的新字符串。
示例四:
代码展示:
public class Register {
public static void main(String[] args) {
String s = new String("你好,");
String name = new String("张三!");
String sentence = s.concat(name);
System.out.println(sentence);
String sayHi = name + "你好";
System.out.println(sayHi);
}
}
输出结果:
拼接字符串的方法有两种:使用“+”运算符或使用String类的concat()方法。
(4)字符串提取和查询
常用的提取和搜索字符串的方法如下所示:
示例五:
public class TestString {
public static void main(String[] args) {
String str = " 你好 |我1是一名 老2师|教jav3a|欢迎来口碑 ";
System.out.println(str.trim());//左右去空格
System.out.println(str.contains("我1是一名"));
System.out.println(str.startsWith("a", 20));
byte[] bytes=str.getBytes();
System.out.println(str.length());
System.out.println(bytes.length);
}
}
输出结果:
字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的索引位置从0到字符串长度-1结束。
示例六:
import java.util.Arrays;
public class TestString2 {
public static void main(String[] args) {
String str = "我是一名老师";
String s = new String(str.getBytes(), 0, 3);
System.out.println(s);
char[] chars = str.toCharArray();
System.out.println(Arrays.toString(chars));//转成char类型数组
}
}
输出结果:
(5)字符串拆分
字符串拆分的语法格式如下:
字符串名.split(separator,limit);
separator是可选项,表示根据匹配指定的正则表达式来拆分此字符串。如果匹配不上,则结果数组只有一个元素,即此字符串。
limit可选项,该值用来限制返回数组中的元素个数。
示例七:现有一个字符串,它是一段歌词,每句都以空格“ ”结尾,输出结果如下所示:
分析如下:实现这个需求,只要将每局歌词按照空格拆分即可。此时就可以使用split()方法实现这个需求。
代码展示:
public class Lyric {
public static void main(String[] args) {
String words = "长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山 ";
String[] printword = new String[100];//定义接收数组
System.out.println("***原歌词格式***\n" + words);
System.out.println("\n***拆分后歌词格式***");
printword=words.split(" ");//按照空格进行拆分
for (int i = 0; i < printword.length; i++) {
System.out.println(printword[i]);//打印输出
}
}
}
输出结果:
示例八:输入一个字符串,再输入要查找的字符,判断该字符在该字符串中出现的次数。
代码展示:
import java.util.Scanner;
public class TestAi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符");
String r1=sc.next();
System.out.print("请输入要查找的字符:");
char zi=sc.next().charAt(0);
char[] a=r1.toCharArray();
int r=0;
for (int i = 0; i <r1.length() ; i++) {
if(zi==a[i])
r++;
}
System.out.println(r1+"中包含"+r+"个"+zi+"字!");
}
}
输出结果:
StringBuffer类和StringBuilder类
使用StringBuffer类处理字符串
除了使用String类存储字符串之外,还可以使用StringBuffer类来存储字符串。StringBuffer类也是Java提供的用于处理字符串的一个类。而且它是比String类更高效地存储字符串的一种引用数据类型。特别是对字符串进行连接操作时,使用StringBuffer类可以大大提高程序的执行效率。
(1)如何使用StringBuffer类
StringBuffer类位于java.util包中,是String类的增强类、StringBuffer类提供了很多方法可供使用。
声明StringBuffer对象并初始化的方法如下所示:
StringBuffer sb2=new StringBuffer(“青春无悔”);
(2)常用的StringBuffer类方法
①toString()方法
转换为String类型的语法格式如下:
字符串1.toString();
将StringBuffer类型的字符串1转换为String类型的对象并返回。
②append()方法
追加字符串的语法格式如下:
字符串.append(参数);
将参数连接到字符串后并返回。
该方法和String类的concat()方法一样,都是把一个字符串追加倒另一个字符串后面,所不同的是String类中只能将String类型的字符串追加到一个字符串后,而StringBuffer类可以将任何类型的值追加到字符串之后。
示例九:
使用StringBuffer类实现字符串追加。
代码展示:
public class SbAppend {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("青春无悔");
int num = 110;
//在字符串后面追加字符串
StringBuffer sb1 = sb.append("我心永恒");
System.out.println(sb1);
//在字符串后面追加字符
StringBuffer sb2 = sb1.append('啊');
System.out.println(sb2);
//在字符串后面追加整型数字
StringBuffer sb3 = sb2.append(num);
System.out.println(sb3);
}
}
输出结果:
③insert()方法
插入字符串的语法格式如下:
字符串.insert(位置,参数);
将参数插入到字符串指定位置后并返回。参数值可以是包括String任何类型。
示例十:编写一个方法,实现将一个数字字符串转换成以逗号分隔的数字串,即从右边开每3个数字用逗号分隔
分析:利用StringBuffer类的length()方法,获取数字串的长度,使用for循环从后向前每隔3位插入逗号。
代码展示:
import java.util.Scanner;
public class TestInsert {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//接收数字串,存放于StringBuffer类型的对象中
System.out.print("请输入一串数字:");
String nums = sc.next();
StringBuffer str = new StringBuffer(nums);
//从后往前每隔3位添加逗号
for (int i = str.length() - 3; i > 0; i = i - 3) {
str.insert(i, ',');
}
System.out.print(str);
}
}
输出结果:
使用StringBuilder类处理字符串
java.lang.StringBuilder是JDK 5.0版本新增的类,它是一个 可变的字符序列。 此类提供一个与StringBuffer 兼容的API,被设计用作StringBuffer 的一.个简易替换,在大多数实现中,它比StringBuffer执行要快。使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。
Sting类、StringBuffer类及StringBuilder类对比
String、StringBuffer和StringBuilder 这3个类在处理字符串时有各自的特点和适用场合,具体如下:
(1)String:字符串常量
String是不可变的对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后指向新的String 对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。
(2) StringBuffer:字符串变量
StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下推荐使用StringBuffer类。
字符串连接操作中,Stringuffer 类的执行效率要比String类高,例如:
String str=new String(“welcome to”);
str+=“here”;
以上这两句代码是使用String类型来操作字符串,但其处理步骤实际上是通过建立一个StringBuffer对象,让它调用append()方法,最后再转化成String,这样的话,String的连接操作比StringBuffer多出了一些附加操作,当然效率要低。并且由于String对象的不可变性也会影响性能。
(3 ) StringBuilder:字符串变量
JDK5.0版本以后提供了StringBuilder类,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder 类是单线程的,不提供同步,理论上效率更高。
日期操作类
java.util包也是Java内置的一一个工具包,它包含了集合框架、日期和时间、随机函数生成器等各种实用工具。java.util 包不会默认导入,如果要使用该包中的类,则必须在程序的开始部分进行手工导入。
下面介绍java.util包中几个常见的类。
java.util 包中提供的和日期时间相关的类有Date类、Calendar 类和SimpleDateFormat类等。
Date类对象用来表示日期和时间,该类提供了一系列操作 日期和时间各组成部分的方法。Date 类中使用最多的是获取系统当前的日期和时间,如Date date= new Date();这句代码是使用系统当前时间创建日期对象。
Calendar类也是用来操作日期和时间的类,它可以看作是Date类的一个增强版。Calendar类提供了一组方法, 允许把一个以毫秒 为单位的时间转换成年、 月、日、小时、分、秒。可以把Calendar类当作是万年历,默认显示的是当前的时间,当然也可以查看其他时间。
Calendar类是抽象类,可以通过静态方法getlnstance0O获得Calender类的对象,其实这个获得的对象是它的子类的对象。
Calendar类提供一些方法和静态字段来操作日历,例如:
➢int get(int field):返回给定日历字段的值。
➢YEAR: 指示年。
➢MONTH: 指示月。
➢DAY_ OF_ MONTH:指示一个月中的某天。
➢DAY OF_ WEEK:指示一个星期中的某天。
另外常用的还有格式化日期时间的类DateFormat类,它在java.text包下,是|一个抽象类,提供了多种格式化和解析时间的方法。格式化是指将日期转换成文本,解析是指将文本转换成日期格式。使用比较多的是它的子类SimpleDateFormat,SimpleDateFormat类是一个以与语言环境有关的方式来格式化和解析日期的具体类,如“yyyy-MM-dd HH:mm:ss”就是指定的一种日期和时间格式。
示例十一:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
//格林威治时间1970 01 01 00 00 00 000毫秒到当前毫秒的差值
long now = System.currentTimeMillis();
// System.out.println(now/60/60/24/365);
Date d = new Date();
System.out.println(d);
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String rst = format.format(d);
System.out.println(rst);
//SimpleDateFormat f = new SimpleDateFormat();
System.out.println(d.getTime());
Calendar c = format.getCalendar();
System.out.println("当前的年:"+c.getWeekYear());
System.out.println("一年有多少个周:" + c.getWeeksInWeekYear());
// System.out.println(c.get(Calendar.MONTH));
//System.out.println(c.get(Calendar.DAY_OF_MONTH));
// System.out.println(c.get(Calendar.DAY_OF_YEAR));
System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
// System.out.println(c.getFirstDayOfWeek());
}
}
输出结果:
Random类
Random类用于生成随机数。每当需要以任意或非系统方式生成数字时,可使用此类。之前学习过的Math类的random()方法也可以产生随机数,其实Math类的random()方法底层就是使用Random类实现的。
Random类中还定义了很多方法用于获取随机数,最常用的是nextInt()方法,它返回下一个伪随机数,返回值类型是整型。
返回下一个伪随机数的语法格式如下:
int nextInt();
int nextInt(int n);
前者返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的int值。
后者返回下一个伪随机数,它是取自随机数生成器序列的、在0(包括)和指定值n(不包括n)之间均匀分布的int值。
示例十二:随机生成20个10以内或等于0的整数,并将显示出来。
代码展示:
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
//创建一个Random对象
Random rand = new Random();
//随机生成20个随机整数,并显示
for (int i = 0; i < 20; i++) {
int num = rand.nextInt(10);
System.out.println("第"+(i+1)+"个随机数是:"+num);
}
}
}
输出结果:
注意:如果用同样一个种字值来初始化两个Random对象,然后用每个对象调用相同的方法,那么得到的随机数也是相同的。