String API
常用API
public char charAt(int index):根据下标获取字符。
public boolean contains(String str):判断当前字符串中是否包含str。
public char[] toCharArray():将字符串转换成数组。
public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
public int length():返回字符串的长度。
public String trim():去掉字符串前后的空格。
public String toUpperCase():将小写转成大写。
public boolean endsWith(String str):判断字符串是否以str结尾。
public String replace(char oldChar,char newChar):将旧字符串替换成新字符串
public String[] split(String str):根据str做拆分。
public String subString(int beginIndex,int endIndex):在字符串中截取出一个子字符串
String str = " 我爱我的祖国,中国很美,Very Beautful ";
// 1. charAt(int index):char 获得指定位置字符
char c = str.charAt(3);
System.out.println(c);//爱
// 2 . contains(String msg):boolean 判断是否包含指定字符串。
boolean s = str.contains("祖国");
System.out.println(s);//true
// 3 toCharArray() 统计一个字符串中 数字字符和非数字字符的个数?
char[] chars = str.toCharArray();
System.out.println(Arrays.toString(chars));
//[ , , 我, 爱, 我, 的, 祖, 国, ,, 中, 国, 很, 美, ,, V, e, r, y, , B, e, a, u, t, f, u, l, , , ]
// 4 indexOf( String str [,int fromIndex] ):int 查询字符串出现的位置
int index = str.indexOf("祖国");
System.out.println(index);//6
// 5 length():int 返回字符串长度
int length = str.length();
System.out.println(length);//30
// 6 trim():String 去首位空格
String trim = str.trim();
System.out.println(str);
System.out.println(trim);
// 7 转大小写
String s1 = str.toUpperCase();
System.out.println(s1);//我爱我的祖国,中国很美,VERY BEAUTFUL
String s2 = str.toLowerCase();
System.out.println(s2);// 我爱我的祖国,中国很美,very beautful
String str2 = "我自己,永无止境,学无止境.png";
// 8 endsWith(String str):boolean 判断字符串结尾
boolean png = str2.endsWith("png");
System.out.println(png);//true
// 9 replace(String old,String new ):String 替换
String s3 = str2.replace("我自己", "张三");
System.out.println(s3);//张三,永无止境,学无止境.png
// 10 split(String reg ):String[] 拆分
String[] split = str2.split(",");
for (int i = 0; i <split.length ; i++) {
System.out.println(split[i]);
//我自己
//永无止境
//学无止境.png
}
// 11 substring(int beginIndex [,int endIndex] ) 截取
String s4 = str2.substring(1, 4);
System.out.println(s4);//自己,
}
可变字符串
/*
* 可变字符串: StringBuilder StringBuffer
* 含义: 可以在现有的基础上做修改,区别于String.
* API: 基本一致。核心方法append()
*
* */
public class StringBuilderAndStringBufferDemo {
public static void main(String[] args) {
//StringBuilder sb = new StringBuilder(); // ""
StringBuilder sb = new StringBuilder("hello"); // "hello"
// 1. 追加新的内容到末尾 append(Object obj )
sb.append("java"); //"hellojava"
sb.append("mysql"); //"hellojavamysql"
sb.append("spring");//"hellojavamysqlspring"
System.out.println(sb);
// 2. delete(int start, int end) 删除字符串
sb.delete(9,14);
System.out.println(sb);
// 3. replace(int start, int end, String newContent)
sb.replace(9, sb.length(), "php" );
System.out.println(sb);
// 4 . indexOf(String str, int from) 正向查找
int index = sb.indexOf("java", 0);
System.out.println(index);
// 5 . lastIndexOf(String str, int from) 反向查找
sb.append("java123");
System.out.println(sb);
int index2 = sb.lastIndexOf("java", 17);
System.out.println(index2);
// 6反转
sb.reverse();
System.out.println(sb);
// 各种字符串之间的转换 String StringBuilder StringBuffer
String s1 = "hello";
// 1. String 转 StringBuilder , StringBuffer
StringBuffer s2 = new StringBuffer( s1 );
System.out.println(s2);
// 2. StringBuilder StringBuffer 转 String
String s3= s2.toString();
System.out.println(s3);
// 字符串与数值的转换
String price = "120";
// 1.可以使用包装类 parseXXX(): 返回基本数据类型
int num = Integer.parseInt(price);
System.out.println(num+12);
//double num = Double.parseDouble(price);
//System.out.println(num+10);
// 2.可以使用包装类的valueOf(String str):返回包装类类
Integer num2 = Integer.valueOf(price);
System.out.println(num2++);
// 数值转字符串
int a = 100;
// 1. 通过 +拼接空串
String aa = a+"";
System.out.println(aa);
// 2. String 的方法
String str = String.valueOf(a);
System.out.println(str);
}
}
课堂案例1
package demo2;
//课堂练习
// 1.给定一个字符串 string ss="你好"
// 2.把 ss 转换成stringBuilder后在追加“刘嘉玲"
// 3.把刘嘉玲替换为张柏芝
// 4.再添加周星驰
// 5.再删除张柏芝
// 6.反转整个字符串。
public class StringMain {
public static void main(String[] args) {
String ss = "你好";
StringBuilder str = new StringBuilder(ss);
str.append("刘嘉玲");
System.out.println(str);
StringBuilder str1 = str.replace(2, str.length(), "张柏芝");
System.out.println(str1);
System.out.println(str.append("周星驰"));
//System.out.println(str.replace(2,5,""));
System.out.println(str.delete(2,5));
StringBuilder str2 = str.reverse();
System.out.println(str2);
}
}
课堂案例2
package demo2;
// 1,定义一个字符串 string age="30岁";
// 2.截取出3o乘2后再拼接“岁"
public class StringMain2 {
public static void main(String[] args) {
String name = "30岁";
StringBuilder str = new StringBuilder(name);
StringBuilder str1 = str.delete(2, 3);
System.out.println(str1);
Integer integer = Integer.valueOf(str1.toString());
System.out.println(integer*2+"岁");
}
}
课堂案例3
package demo2;
//3,定义一个字符串 string money = "5.4” 定义一个数量string num="5",// 计算money*num的结果。
public class StringMain3 {
public static void main(String[] args) {
String money = "5.4";
String num = "5";
Double a = Double.valueOf(money);
Integer b = Integer.valueOf(num);
System.out.println(a*b);
}
}
BigDecimal 和 BigInteger辅助类
package demo3;
import java.math.BigDecimal;
import java.math.BigInteger;
public class MyMath {
public static double add(double n1,double n2){
BigDecimal n11 = new BigDecimal(String.valueOf(n1));
BigDecimal n22 = new BigDecimal(String.valueOf(n2));
return n11.add(n22).doubleValue();
}
public static double subtract(double n1,double n2){
BigDecimal n11 = new BigDecimal(String.valueOf(n1));
BigDecimal n22 = new BigDecimal(String.valueOf(n2));
return n11.subtract(n22).doubleValue();
}
public static double multiply(double n1,double n2){
BigDecimal n11 = new BigDecimal(String.valueOf(n1));
BigDecimal n22 = new BigDecimal(String.valueOf(n2));
return n11.multiply(n22).doubleValue();
}
public static double divide(double n1,double n2){
BigDecimal n11 = new BigDecimal(String.valueOf(n1));
BigDecimal n22 = new BigDecimal(String.valueOf(n2));
return n11.divide(n22,2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static String add(long n1,long n2){
BigInteger nn1 = new BigInteger(String.valueOf(n1));
BigInteger nn2 = new BigInteger(String.valueOf(n2));
return nn1.add(nn2).toString();
}
public static String subtract(long n1,long n2){
BigInteger nn1 = new BigInteger(String.valueOf(n1));
BigInteger nn2 = new BigInteger(String.valueOf(n2));
return nn1.subtract(nn2).toString();
}
public static String multiply(long n1,long n2){
BigInteger nn1 = new BigInteger(String.valueOf(n1));
BigInteger nn2 = new BigInteger(String.valueOf(n2));
return nn1.multiply(nn2).toString();
}
public static String divide(long n1,long n2){
BigInteger nn1 = new BigInteger(String.valueOf(n1));
BigInteger nn2 = new BigInteger(String.valueOf(n2));
return nn1.divide(nn2).toString();
}
}
测试类
package demo3;
public class MathMain {
public static void main(String[] args) {
double s1 = 1.0;
double s2 = 0.9;
double result1 = MyMath.add(s1,s2);
System.out.println(result1);
double result2 = MyMath.subtract(s1,s2);
System.out.println(result2);
double result3 = MyMath.multiply(s1,s2);
System.out.println(result3);
double result4 = MyMath.divide(s1,s2);
System.out.println(result4);
System.out.println(Long.MAX_VALUE);
long a = 9223372036854775807l;
long b = 9223372036854775807l;
System.out.println("===================================");
String res1 = MyMath.add(a,b);
System.out.println(res1);
String res2 = MyMath.subtract(a,b);
System.out.println(res2);
String res3 = MyMath.multiply(a,b);
System.out.println(res3);
String res4 = MyMath.divide(a,b);
System.out.println(res4);
}
}
Date API
package demo4;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate {
public static void main(String[] args) throws ParseException {
//获得一个当前系统时间
Date date = new Date();
System.out.println(date);
// 基于毫秒数构建时间
Date date1 = new Date(60000);
System.out.println(date1);
//解析日期(过期了)
System.out.println( date.getYear() + 1900 );
System.out.println( date.getMonth() + 1 );
System.out.println( date.getDate() );
// 获得日期对象对应的毫秒数
long time = date.getTime();
System.out.println(time);
System.out.println("------------------格式化日期的工具类SimpleDataFormat------------------------");
//日期对象
Date now = new Date();
//日期格式化Date - > String
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//1.创建SimpleDateFormat对象并指定格式
String formatDateStr = sdf.format(now); // 2. format 格式化方法,接收格式化结果
System.out.println(formatDateStr);
//日期解析 String - > Date
String birthday = "2000-10-22";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); // 1. 创建SimpleDateFormat对象并指定格式
Date birthdayDate = sdf2.parse(birthday); // 2. parse 解析方法,接收返回结果
System.out.println(birthdayDate);
Person pp = new Person("陈佳",birthdayDate);
System.out.println(pp);
}
}
class Person{
String name;
//日期类型的属性
Date birthday;
public Person(String name, Date birthday) {
this.name = name;
this.birthday = birthday;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", birthday=" + birthday +
'}';
}
}
外加
//Math.random()是用于随机生成一个[0.0, 1.0) 的伪随机 double 值.
随机生成[a, b): (int)(Math.random()*(b-a)+a)
随机生成[a, b] (int)(Math.random()*(b-a+1)+a)
练习
package works;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
public class MyStringUtil {
//定义一个字符串工具类,提供大量处理字符串的方法,注意是静态方法啊(调用方便嘛)。我已经给出方法的模板,大家编写实现代码。
// 1. 验证指定字符串是否为 null 或 空串
public static boolean isNullOrBlank(String str) {
if ("".equals(str) || str == null) {
return false;
}
return true;
}
// 2. 获得一个字符窜 前 n个字符内容,不够则有多少返回多少
public static String topN(String str, int n) {
// char[] strs = str.toCharArray();
// char[] newstr = new char[n];
// for (int i = 0; i < strs.length; i++) {
// if (n > strs.length) {
// return Arrays.toString(strs);
// }
// }
// int a = 0;
// for (int j = 0; j < n; j++) {
// newstr[j] = strs[a++];
// }
// return new String(newstr);
if (n > str.length()) {
return str.substring(0, str.length());
}
return str.substring(0, n);
}
// 3. 获得一个字符串 后 n个字符内容,不够则有多少返回多少
public static String lastN(String str, int n) {
// char[] strs1 = str.toCharArray();
// char[] newstr1 = new char[n];
// for (int i = 0; i < strs1.length; i++) {
// if (n > strs1.length) {
// return Arrays.toString(strs1);
// }
// }
// int a = strs1.length - 1;
// for (int j = n; j >= 1; j--) {
// newstr1[j - 1] = strs1[a--];
// }
// return new String(newstr1);
if (n > str.length()) {
return str.substring(0, str.length());
}
return str.substring(n, str.length());
}
// 4. 把指定传入的英文单词首字母变大写 user = User
public static String fristCharUpper(String str) {
char[] chars = str.toCharArray();
if (chars[0] > 'a' && chars[0] < 'z') {
chars[0] = (char) (chars[0] - 32);
}
return new String(chars);
}
// 5. 提供一个静态方法把一个日期转成字符串 yyyy-MM-dd
public static String toDateString(Date date) {
SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd");
String format = d.format(date);
return new String(format);
}
// 6. 提供一个静态方法把一个日期字符串(yyyy-MM-dd) 解析为Date 类型
public static Date stringToDate(String dateStr) throws ParseException {
SimpleDateFormat d1 = new SimpleDateFormat("yyyy-MM-dd");
Date parse = d1.parse(dateStr);
return parse;
}
// 7. 提供一个静态方法,判断一个邮箱基本格式是否正确。
public static boolean checkEmail(String email) {
boolean contains = email.contains("@");
boolean contains1 = email.contains(".");
if (contains && contains1 && email.indexOf("@") < email.indexOf(".")) {
return true;
}
return false;
}
// 8.提供一个静态方法,生成一个指定位数的字符串验证码(包含字母A-z 数字0-9)
public static String randomCode(int charCount) {
char[] chars = new char[charCount];
for (int i = 0; i < charCount; i++) {
int a = (int) (Math.random() * 75 + 48);
if ((a >= 58 && a < 65) || (a >= 91 && a < 97)) {
i -= 1;
continue;
} else {
chars[i] = (char) a;
}
}
return new String(chars);
}
// 9.提供一个静态方法,接收一个日期,返回星座是什么。
public static String star(String dateStr) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
Date parse = dateFormat.parse(dateStr);
int a = parse.getMonth() + 1;
if (a >= 12 || a < 0) {
System.out.println("输入有误。");
}
switch (a) {
case 1:
return "摩羯座";
case 2:
return "水瓶座";
case 3:
return "双鱼座";
case 4:
return "白羊座";
case 5:
return "金牛座";
case 6:
return "双子座";
case 7:
return "巨蟹座";
case 8:
return "狮子座";
case 9:
return "处女座";
case 10:
return "天秤座";
case 11:
return "天蝎座";
case 12:
return "射手座";
}
return null;
}
// 10. 提供一个静态方法,把一个下划线命名的单词转换成驼峰命名返回,比如user_name=>userName
public static String toCamel(String keywords) {
char[] chars = keywords.toCharArray();
for (int i = 0; i < chars.length; i++) {
if ('_' == chars[i]) {
char s = Character.toUpperCase(chars[++i]);
chars[i] = s;
}
}
String s = new String(chars);
String s1 = s.replaceAll("_", "");
return s1;
}
// 11. 提供一个静态方法,实现接收 String 返回 double
public static double toDouble(String num) {
Double aDouble = Double.valueOf(num);
return aDouble;
}
// 12. 提供一个静态方法,实现接收 String 返回 int
public static int toInt(String num) {
int i = Integer.parseInt(num);
return i;
}
//13. 提供一个静态方法,实现接收 String 返回 long
public static long toLong(String num) {
Long aLong = Long.valueOf(num);
return aLong;
}
//14. 提供一个静态方法,实现过滤敏感词(敏感词库自己定义),如果包含敏感词,把敏感词替换为*
public static String sensitive(String keywords) {
Scanner sc = new Scanner(System.in);
System.out.println("输入你要过滤的字符串:");
String str = sc.next();
String s = str.replaceAll(keywords, "*");
return s;
}
}
Calendar类(日历类)
package demo1;
//日历
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.Calendar;
import java.util.Date;
/**
* 日历也是存储了一个日期以及该日期周边的关系信息,以及提供了一组访问操作日期的API.
*
* Calendar :类,抽象类,通过 getInstance() 获得实例,默认指向时间也是当前系统时间。
*
* 1. 日历设置为指定的时间。
*/
public class TestClandar {
public static void main(String[] args) {
//创建日历对象
Calendar instance = Calendar.getInstance();
System.out.println(instance);
//1. 设置指向特定日期set(int y, int m ,int d)
instance.set(2008,8,8,8,8,8);
System.out.println(instance);
//2 . 设置指定字段的值 set( int field , int value )
instance.set( Calendar.YEAR ,2025);
System.out.println(instance);
instance.set( Calendar.MONTH,4);
System.out.println(instance);
//3 . 获得指定字段的值 get(int filed):int
String xx= instance.get(Calendar.YEAR)+"-"+instance.get(Calendar.MONTH)+"-"+instance.get(Calendar.DATE);
System.out.println(xx);
// 4 设置一个指定日期
instance.setTime( new Date());
System.out.println(instance);
// 5 获得日历对应 的日期时间
Date time = instance.getTime();
System.out.println(time);
// 6 添加 // 2020-10-10生产日期 18=》 过期时间
instance.add(Calendar.MONTH, -12);
System.out.println(instance.getTime());
// 7 获得毫秒
System.out.println( instance.getTimeInMillis());
}
}
案例
打印某一个月的
package demo2;
import java.util.Calendar;
import java.util.Scanner;
//打印日历
public class PrintCalendar {
public static void main(String[] args) {
//提示用户输入年份 和月份
Scanner scanner = new Scanner( System.in );
System.out.println("输入年");
int year = scanner.nextInt();
System.out.println("输入月份");
int month = scanner.nextInt()-1;//月份-1
//设置日期到指定的年月日
Calendar instance = Calendar.getInstance();
instance.set(year,month,1);
//定义输入的头
String[] days = { "星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
//不同的月份的号数最大值不同,最小号数确定为1。最小号数1号前有不同偏移。
//打印号数前,获取1号是星期几
int index = instance.get(Calendar.DAY_OF_WEEK);
//获得当月最大天数
int maxDate = instance.getActualMaximum(Calendar.DATE);
//打印头
for(int i=0;i<days.length;i++){
System.out.print(days[i]+"\t");
}
System.out.println();
//打印空格
for(int i=0;i<index-2;i++){
System.out.print("\t\t");
}
//打印号数
for (int i=1; i<=maxDate;i++){
System.out.print(i+"\t\t");
//把日期设置为当天,方便使用日期api
instance.set(year,month,i);
//判断换行
if( instance.get(Calendar.DAY_OF_WEEK)==1 ){
System.out.println();
}
}
}
}
打印一年的月份日期
package demo2;
import java.util.Calendar;
import java.util.Scanner;
//打印日历
public class PrintCalendar2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
for(int i=1;i<=12;i++){
System.out.println("=============第"+i+"月===============");
printCalendar(year,i);
}
}
public static void printCalendar(int year, int month ){
//设置日期到指定的年月日
Calendar instance = Calendar.getInstance();
instance.set(year,month-1,1);
//定义输入的头
String[] days = { "星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
//打印号数前,获取1号是星期几
int index = instance.get(Calendar.DAY_OF_WEEK)!=1?instance.get(Calendar.DAY_OF_WEEK):8;
//打印头
for(int i=0;i<days.length;i++){
System.out.print(days[i]+"\t");
}
System.out.println();
//打印空格
for(int i=0;i<index-2;i++){
System.out.print("\t\t");
}
//不同的月份的号数最大值不同,最小号数确定为1。
//最小号数1号前有不同偏移。
//获得当月最大天数
int maxDate = instance.getActualMaximum(Calendar.DATE);
for (int i=1; i<=maxDate;i++){
//把日期设置为当天
instance.set(year,month-1,i);
System.out.print(i+"\t\t");
//判断换行
if( instance.get(Calendar.DAY_OF_WEEK)==1 ){
System.out.println();
}
}
System.out.println();
}
}