字符串相关类

第三节 常用类

1. 字符串相关类

1)String

不可变的字符序列

2)StringBuffer

可变字符序列,并且线程安全,但是效率低

3)StringBuilder

可变字符序列,线程 不安全,但是效率高 (一般用他!)

1)String

由于使用特别多,所以有特殊快捷的创建方式通过双引号 "" 直接创建对象

构造方法

tISSsA.png

常用方法

tISCZt.png

tISeMj.png

还有 valueOf()系列,可以将基本类型的数据转为字符串,当然一般不用这么麻烦

字符串分割 split()

2)StringBuffer和StringBuilder

这两个类使用方式类似。一般用于做字符串拼接,删除,替换,反转,截取,插入等。

通过查看源码,认识StringBuffer和StringBuilder的构造方式,以及与String的转换方式

2. 包装类

JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中。例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包

tIS3JU.png

在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可。

对于包装类说,这些类的用途主要包含两种:

a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。

b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本类型数据、包装类对象、字符串之间提供转化!)。

包装类和基本类型之间存在自动装箱和自动拆箱操作,所以可以互相方便地切换。

3. 日期类

​ 作为与我们息息相关的日期,在开发中也是很常见的。在程序中,日期的存储也是个数字,是个长整型的数字。0代表1970年1月1日 00:00:00,而我们处于东八区,所以为1970年1月1日 08:00:0 ,往前推,负数表示之前的时间,往后算正数表示之后的时间。

​ 而在日常中,我们表示日期是使用字符串表示,如 1970年1月1日 08:15 、 1970/01/01 08:15 1970-01-01 08:15 等等,因此就涉及到 如何将长整型数与字符串互转的问题,这也是学习的重点。

1) pre8常用日期相关类

常见方法
System
系统类
currentTimeMillis(): 当前时间
Date
日期类
new Date() :当前时间<br />new Date(指定时间):指定时间<br />getTime(): 获取时间
setTime(指定时间):设置指定时间
SimpleDateFormat
格式器
new SimpleDateFormat(模板)<br />format() : 格式化为字符串<br />parse():转成日期

(1) 当前时间

//当前毫秒数
long timeNum =System.currentTimeMillis();
System.out.println(timeNum);
//当前日期
Date nowDate =new Date();
System.out.println(date);

(2) Date

//0 时间点  东八区 1970年1月1日 08:00:0 
Date date =new Date(0L);
System.out.println(date);
//指定一个时间
Date myDate =new Date(189712329239L);
System.out.println(myDate);
System.out.println(myDate.getTime()); //获取长整型数字
//修改时间
myDate.setTime(0L);
System.out.println(myDate);

(3) SimpleDateFormat

日期格式化,在日期格式化的过程中,会用到模板,这个在api中有详细说明

tIiqII.png

字符串的表示形式与日期互换,使用日期转换器SimpleDateFormat ,代码如下:

public static void main(String[] args) throws ParseException {
    Date myDate2 =new Date(0L);
    //字符串的形式
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //转字符串
    String dateStr =dateFormat.format(myDate2);
    System.out.println(dateStr);
    //转成日期
    myDate = dateFormat.parse("2020-02-25 11:16:30"); //这里有异常
    System.out.println(myDate.getTime());
}

<span style="font-size:20px;color:red;background:#ff0">注意parse()存在 的异常 ParseException </span>

2) 8日期相关的常用api

(1) jdk8的日期类

java8提供了更为简介的,更明了的常用日期类

常见方法
Year<br />年 now():今年
Month
JANUARY:一月
FEBRUARY二月
..
LocalDate
本地日期
now():不包含时分秒的本时区的当前时间<br />of(年,月,日):构建本时区的时间
LocalDateTime
本地时间
now():包含时分秒的本时区的当前时间<br />of(年,月,日,时,分,秒):构建本时区的时间
format() : 格式化为字符串<br />parse():转成日期
//今年
System.out.println("今年"+Year.now());
//6月
System.out.println("月份:"+Month.FEBRUARY);
//今天不包含时分秒
LocalDate today = LocalDate.now();
System.out.println("今天:"+today);
//此时此刻
LocalDateTime now = LocalDateTime.now();
System.out.println("现在:"+now);
//您的生日
LocalDate yourBirthDate = LocalDate.of(1999, Month.JUNE, 15);
System.out.println("生日:"+yourBirthDate);
//您的学习时间
LocalDateTime dateTime = LocalDateTime.of(2020, 2, 25, 12, 30,40);
System.out.println("时间:"+dateTime);

(2) jdk8的格式化类

常见方法
DateTimeFormatter
格式器
ofPattern(模板):<br />
//日期转换器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化日期字符串
LocalDateTime now = LocalDateTime.now();
String nowStr = now.format(formatter);  //放入格式器
System.out.println(nowStr);

String dateStr= "2020-02-25 11:23:04";
//转成日期 
LocalDateTime date= LocalDateTime.parse(dateStr, formatter);//放入格式器
//获取日
System.out.println(date.getDayOfMonth());

(3) jdk8的间隔类

java8提供了方便计算的间隔相关的类 ,<span style="font-size:20px;color:red;background:#ff0">这部分了解即可。</span>

常见方法
Period
时期
between():间隔 年月日
Duration
持续期间
ofDays(天数):天
ofHours(小时数):时
ofMinutes(分钟数):分
ofSeconds(秒数):秒
Instant
瞬间
now():现在
plus():添加
minus():相减
ChronoUnit
期量单位
YEARS、MONTHS、DAYS、HOURS、MINUTES、SECONDS
getDuration() :获取Duration<br />between():间隔
LocalDate today = LocalDate.now();
LocalDate birthDate = LocalDate.of(1999, 3, 15);
//时期间隔 年月日
Period p = Period.between(birthDate, today);
System.out.printf(p.getYears()+"年"+p.getMonths()+"d"+p.getDays()+"日");

LocalDate startDate = LocalDate.of(1993, 8, 19);
LocalDate endDate = LocalDate.of(1994, Month.JANUARY,16);
//期量单位 间隔
long between =ChronoUnit.YEARS.between(startDate, endDate);     
System.out.println("两年之间的差   : " + between); //0 不是1不满一年不计算在内
between =ChronoUnit.MONTHS.between(startDate, endDate);     
System.out.println("两月之间的差   : " + between); //4 不是5不满一月不计算在内       

//瞬间 
Instant inst1 = Instant.now();
Instant inst2 = inst1.minus(Duration.ofSeconds(10));
System.out.println("毫秒相隔 : " + Duration.between(inst1, inst2).toMillis());
System.out.println("秒相隔 : " + Duration.between(inst1, inst2).getSeconds());

4. Math类

​ java.lang.Math 提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为 double 型。

tIFSsg.png

5.File类

File 代表文件和目录路径名的抽象表示形式

File 类的常见构造方法:public File(String pathname)

​ 以 pathname 为路径创建 File 对象,如果 pathname 是相对路径,则默认的当前路径在系 统属性 user.dir 中存储。 File 的静态属性 separator 存储了当前系统的路径分隔符。

常见的方法

 public boolean canRead()     
 public boolean canWrite()     
 public boolean exists()      
 public boolean isDirectory()    
 public boolean isFile()      
 public boolean isHidden()     
 public long lastModified()  
 public long length() 
 public String getName()      
 public String getPath() 

代码示例

import java.io.File; 
/**  * 程序  -->文件 需要建立联系  * 抽象为 File 类 
 *   * 1、文件夹 与文件  抽象-->File  * 2、分割符:  *    路径分隔符:  ; pathSeparator   *    目录分隔符:  \   /   separator   *    静态常量: 
 *   * 1、构建 File 
   File(String pathname)  
 * File(File parent, String child)  
 * File(String parent, String child)  
 * 
 */ 
 
public class FileDemo01 { 
 
 /** 
  * @param args 
  */ 
 public static void main(String[] args) { 
  System.out.println(File.pathSeparator); 
  System.out.println(File.separator); 
  //绝对路径 与文件建立联系 
  File src = new File("E:\\test\\03.gif"); 
  src = new File("E:/test/03.gif"); 
  src = new File("E:"+File.separator+"test"+File.separator+"03.gif"); 
   
  System.out.println(src.exists()); 
     //相对路径 
  File src2 = new File("E:/test","03.gif"); 
  src2 = new File(new File("E:/test"),"03.gif"); 
  System.out.println(src.exists()); 
 } 
} 
import java.io.File; 
import java.io.FilenameFilter; 
import java.io.IOException; 
 
/**  * 1、创建对象  new File(完整路径)   -->绝对路径  new File(上级路径,本名); -->相对路径   new File(上级抽象表示形式, 本名)  2、方法 1)区分目录 or 文件 
isFile() isDirectory() 2)获取路径 名称 
 getPath() 
 getAbsolutePath() 
 getName()   3)判断文件是否存在 
 exists()   4)创建文件 
 createNewFile()   5)创建目录  mkdir() -->创建一层,确保父路径存在,如果父路径不存在,不能创建 mkdirs() -->父路径不存在,全部创建 6)列表 
listFiles() 7)删除文件 
delete()  
 * 
 * 
 */ 
public class FileDemo02 { 
 
 public static void main(String[] args) throws IOException { 
  File src2 = new File("E:/test","03.gif");   boolean flag =src2.isFile(); //是否为文件 
   flag =src2.isDirectory(); 
  System.out.println(flag);   //获取文件名称或路径 
  String name = src2.getName(); 
  System.out.println(name); 
  String path = src2.getPath(); 
  path = src2.getAbsolutePath(); 
  System.out.println(path); 
     //文件是否存在 
  flag = src2.exists();   if(!flag){ //不存在创建 
   src2.createNewFile(); 
  }   //创建目录 
  src2 = new File("E:/test/test2/test3");   src2.mkdir(); //确保父路径存在,才能创建   src2.mkdirs();// 如果父路径不存在,则创建 
     //列出当前文件夹的子目录 
  src2 = new File("E:/xp/20130401");   if(src2.isDirectory()){ //目录才有子目录 
   File[] subFiles = src2.listFiles(new FilenameFilter(){ 
 
    @Override 
    public boolean accept(File dir, String name) { 
     /* 
     System.out.println(name); 
     if(name.contains("xls")){ 
      return true; 
     }*/ 
      
      
     return !new File(dir,name).isDirectory(); 
    } 
   }); 
   for(File temp:subFiles){ 
    System.out.println(temp); 
   } 
  } 
  //delete()  
  src2 = new File("E:/test","03.gif"); 
  boolean flag2 =src2.delete(); 
   
  System.out.println(flag2); 
 } 
} 

通过 File 对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)。

public boolean createNewFile()throws IOException     
public boolean delete()  
public boolean mkdir()
mkdirs() 
/** *递归打印文件夹  */  
public static void printName(File src){   
    if(null ==src){    
        return;   
    }   
    System.out.println(src.getPath());     
    if(src.isDirectory()){    
        for(File sub:src.listFiles()){     
            printName(sub);    
        }  
    }   
} 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351