黑马程序员----API常用类以及正则表达式

---------------------------android培训、java培训、期待与您交流!---- -------------------------

获取键盘输入
     

    使用Scanner

     Scanner 基于正则表达式的文本扫描器
          可以从文件,输入流,字符串中解析出基本类型值和字符串值。
          提供了多个构造器,不同的构造器可以接受文件,输入流,字符串作为数据源
     主要提供2个方法来扫描输入:
           hasNextXxx() :     是否还有下一个输入项,
                    Xxx可以使Int,Long,,, 如果是下一个字符串,可以省略Xxx
           nextXxx() :     获取下一个输入项。
     默认使用 空白(包括空格,Tab,回车)作为多个输入项之间的分隔符
          useDelimiter("\n");     //将回车键作为多个项之间的分隔符
     Scanner的读取操作可能被阻塞来等待信息的输入。
    
     两个简单的方法来逐行读取:
          boolean hasNextLine();
          String nextLine();

     Scanner也可以获取任何基本类型的输入项
          boolean hasNextLong();
          long nextLong();
          .....

     Scanner 还可以读取文件的输入。
          只要在创建Scanner对象时,传入一个File对象作为参数,就可以让Scanner读取文件中的内容。

    使用BufferedReader 获取键盘输入


     在JDK1.5之前,程序通常使用BufferedReader 类来获取键盘的输入
     创建 用于获取键盘输入的BufferedReader对象:
          BufferedReader br =
               new BufferedReader(new InputStreamReader(System.in));
     然后调用对象的readLine()方法来逐行读取键盘的输入;阻塞式方法等待键盘的输入

     BufferedReader 不能读取基本的类型输入项,
     用户的键盘输入都被BufferedReader当成String对象,只能读取String对象。
    

系统相关

     System类

          提供了代表标准输入,标准输出和错误输出的类属性;
               静态属性
                    in
                    out    
                    error
               静态方法:用于改变系统的标准输入,输出和错误流。
                    setIn()
                    setOut()
                    setErr()    
          还有一些静态方法用于访问环境变量,系统属性的方法
               几个方法 :
               getenv()
               getProperties()
               getProperty()
          还提供了加载文件和动态链接库的方法。
          还提供了通知系统进行垃圾回收的
               gc()
          和通知系统进行资源清理的
               runFinalization()         
          还有2个获取系统当前时间的方法
                long currentTimeMillis()
               long nanoTime()
               返回当前时间与UTC 1970年1月1日午夜的时间差,前者毫秒单位,后者微秒单位。看系统支持度
          还有一个方法,可以返回指定的对象的精确hasCode值
               identityHashCode(Object x)


     Runtime

          每个Java程序都有一个与之对应的Runtime实例,
          应用程序通过该对象与其运行时环境相连。
          1.不能创建Runtime实例,
          2.通过 Runtime.getRuntime() 方法取得程序关联的Runtime对象。
          3.提供      gc()               -|
               runFinalization()     -|通知系统进行垃圾回收,清理系统资源

               load(String fileanme)          -|
               loadLibrary(String libname)     -|加载文件和动态链接库。
          4.代表Java程序的运行时环境,可以访问JVM的相关信息,
               availableProcessors()     处理器数量
               freeMemory()          空闲内存数
               totalMemory()          总内存数
               maxMemory()          可用最大内存数
          5.Runtime还有一个功能:可以直接单独启动一条进程来进行操作系统的命令
                exec("notepad.exe");

常用类

     Object

          是所有类,数组,枚举类的父类
          boolean equals(Object obj)
          protected void finalize()
          Class<?> getClass()          :返回该对象的运行时类
          int hashCode()
          String toString()          :返回“运行时类名@十六进制hashCode值”

          wait()
          notify()
          notifyAll()               :用于控制线程的暂停和运行
    

     String, StringBuffer, StringBuilder

          String          :不可变类
          StringBuffer     :字符序列可变的字符串,线程安全,
          StringBuilder     :字符序列可变的字符串,线程不安全,性能略高
    
          1.String
               String(byte[] bytes, Charset charset)     :使用指定的字符集将指定的byte数组解码成一个新的String对象。
               String(byte[] bytes, String charsetName):使用指定的字符集将指定的byte数组解码成一个新的String对象。
               String(StringBuffer buffer)
               String(StringBuilder builder)
               char charAt(int index)         
               int compareTo(String anotherString)      :拿当前的String对象与antherString比较
               boolean contentEquals(StringBuffer sb)     :将该String对象与StringBuffer对象sb进行比较
                                        当他们包含的字符序列相同时返回true
               boolean equalsIgnoreCase(String str)     :忽略大小写的字符串比较。
               int indexOf(String str)               :找出str子字符串在该字符串中第一次出现的位置
               int lastIndexOf(String str)          :str子字符串在该字符串中最后一次出现的位置
               char[] toCharArray()               :将字符串转换成char数组
               String toLowerCase()
               String toUpperCase()
               static String valueOf(X x)          :一系列用于将基本类型转化成String对象的方法

     Math类

          toDegrees()     //将弧度转换角度
          toRadians()     //将角度转换成弧度
          acos()          //反余弦
          asin()          //反正弦 -pi/2 到 pi/2间
          atan()          //反正切 -pi/2 到 pi/2间
          cos()          //三角余弦
          sin()          //三角正弦
          cosh()          //双曲余弦
          sinh()          //双曲正弦
          tan()          //正切
          atan()          //余切
          tanh()          //
          atan2(double y, double x) //将矩形坐标(x, y) 转换成极坐标(r, thet);返回所得角度 theta.
          floor()          //取整,返回小于目标数的最大整数
          ceil()          //取整,返回大于目标数的最小整数
          round()          //取整,四舍五入
          squrt()          //平方根
          cbrt()          //立方根
          exp()          //返回欧拉数e的n次幂
          pow()          //乘方
          log()          //自然对数
          log10()          //底数为10的对数
          loglp()          //回参数与1之和的自然对数
          abs()          //绝对值

     Random类

          不同于Math类的random()方法,Random类提供了更多方法来生成各种伪随机数,
          nextBoolean()
          nextDouble()
          nextGaussian()
          nextInt()
          nextLong()
          1.为了避免两个Random对象产生相同的数字序列,通常推荐使用当前时间来作为Random对象的种子
                Random rand = new Random(System.currentTimeMillis());

     BigDecimal类

          位于 java.math包中
          为了避免精度丢失:
          1.优先使用基于String 的构造器,因为其他的构造器产生的浮点数的值是不可预知的,唯有此:
                new BigDecimal("0.1")    
          2.如果必须使用double浮点数作为BigDecimal构造器的参数时,不要直接将该double浮点数作为构造器参数来
            创建BigDecimal对象,而应该使用
                BigDecimal.valueOf(double value)
          BigDecimal类提供了add, substract, multiply, divide, pow等函数进行计算。
            的静态方法创建。

          需要先将double类型数值包装成BigDecimal对象,然后调用BigDecimal对象的方法执行运算后再将结果转换成double
          型变量,可以以BigDecimal为基础定义一个Arith工具类:
         

     Data类

          构造器:    
               Data();          //生成一个代表当前日期时间的Data对象。
                         //底层调用 System.currentTimeMillis()获得long整数作为日期参数。
               Data(long date);     //根据指定的long型整数来生成一个Data对象。
          方法:    
               boolean after(Data when);     //测定该日期是否在指定日期when之后
               boolean before(Data when)     //..............................前              
               int compareTo(Data anotherDate);//比较两个日期的大小,后面的时间大于前面时间。
               boolean equals(Object obj);     //
               long getTime();               //
               void setTime(long time);     //设置Date对象的时间。
    

     Calendar类

          1.抽象类,使用
                Calendar calendar = Calendar.getInstance();      //构造Calendar类
          2.子类GregorianCalendar类表示公元纪年
          4.Calendar与Date都是表示日期的工具类,可以直接自由转换
                Date date = calendar.getTime();           //从Calendar对象中取出Date对象
               Calendar calendar2 = Calendar.getInstance();
               calendar2.setTime(date);          //只有通过setTime(Date)方法来转换成Calendar
          4.静态属性:    
               Calendar.YEAR,MONTH,DATE,HOUR,MINITE,SECOND,SUNDAY,..., JANUARY,....,
               //月份的起始值是0而不是1
          5.常用方法
                void add(int field, int amount);      //为给定日历字段添加或者减去指定的时间量
               void roll(int field, int amount);     //类似于add方法,区别在于超出最大范围时,不会向上字段进位
               int get(int field);               //field表示Calendar静态属性
               int getActualMaximum(int field);     //返回指定日历字段可能拥有的最大值
               int getActualMinimum(int field);     //..........................最小值
                void set(int field, int value);           //将给定的日历字段设置为给定值
               void set(int year, int month, int date)     //设置Calendar对象年,月,日三个字段
               void set(int,int,int,int,int,int)     //设置年,月,日,时,分,秒
          6.设置Calendar容错性
               默认Calendar有容错性,当使用set()方法改变指定字段的值时,如果输入了不合法的参数,自动进位或者退位。
               方法:
               Calendar.setLenient(false);     //关闭容错功能,进行参数检查
          7.set()方法的延迟修改
               set(f, value)方法将日历字段f更改为value;
               尽管日历字段f是立即更改的,但是该Calendar所代表的时间却不会立即修改
               知道下一次调用get(),getTime(),getTimeInMillis(),add()或者roll()时才会重新计算日历的时间。
               好处是可以避免多次调用set()不会触发多次不必要的计算。

     TimeZone类

          1.抽象类,只能调用它的静态方法得到TimeZone实例
               public static TimeZone getDefault()     //获得运行机器上的默认时区。
               public staitc TimeZone getTimeZone(int id)      //根据时区ID来获取时区
          2.一些方法
               static String[] getAvailableDs()     //获取Java支持的所有的时区ID
               static TimeZone getDefault()          //
               String getDisplayName()               //获取当前TimeZone对象的时区名称
               String getID()                    //获取时区的ID
               static TimeZone getTimeZone(String ID); //
         

 正则表达式

          1.正则表达式是一个用于匹配字符串的模板,任意字符串都可以当成正则表达式使用
          2.Java提供了 Pattern 和 Matcher 两个类用于提供正则表达式支持。
          3.String类中提供了几个特殊的方法:
               boolean matches(String regex)               //判断是否匹配指定正则表达式
               String replaceAll(String regex, String replacement)
                    //返回匹配regex正则表达式的子串替换成replacement后的新字符串
               String replaceFirst(String regex, String replacement)
                    //........................第一个子串替换成replacement后的新字符串
               String[] split(String regex)
                    //根据给定的正则表达式拆分该字符串后得到的字符串数组

          4.创建正则表达式

               就是创建一个特殊的字符串

               支持的合法字符
                    x (代表任何合法的字符)
                    \0mnn,     \xhh,     \uhhh,     (8进制数代表的字符,16进制值代表的字符,16进制值代表的UNICODE字符)
                    \t,     \n,     \r,     \f, (制表符,换行符,回车符,换页符)
                    \a,     (报警符bell '\u0007')
                    \e,     (Escape符 '\u001B')
                    \cx     (x对应的控制符。 例如 \cM匹配Ctrl-M)

               支持的特殊字符
                    1.有特殊的用途
                    2.如果需要匹配这些特殊字符,必须首先位于前添加反斜线\将这些字符转义。
                    $     ^            
                                匹配一行的结尾    匹配一行的开头 
                     ()     []        
                                标记子表达式的开始和结束位置       用于确定中括号表达式的开始和结束位置
                    {}  
                                用于标记前面子表达式的出现频度
                    *     +     ?     
                                子表达式出现零次或者多次          一次或者多次          零次或者一次
                    .     \     |
                                匹配除换行符\n之外的任何单字符          用于转义               指定两项之间任选一项

              使用“通配符”可以匹配多个字符,“通配符”远远超出了普通通配符的功能,被称为预定义字符:
                    .               \d          \D          \s                \S               \w                     \W          
                   任何字符   0~9        非数字    所有空白符  非空白符     0~9,a-z,A-Z,_     所有非单字字符
                    (d:digit     s:space       w:word)

                方括号表达式表示枚举
                     1.表示枚举                    例如     [abc],表示a,b,c其中任意一个字符
                     2.表示范围                    例如     [a-f], 表示a~f范围内任意字符
                     3.表示求否:^               例如     [^abc],表示非a,b,c的任意字符
                     4.表示“与”运算:&&       例如     [a-z&&[def]]:表示求z~z 和 [def]的交集,即 表示:     d, e或者f
                     5.表示“并”运算               例如     并运算与前面表达式枚举类似
                     【方括号非常灵活,几乎可以匹配任何字符,如可以利用[\\u0041-\\u0056]形式:
                        因为所有中文字符的UNICODE值都是连续的】

               圆括号表达式,圆括号可以使用或运算(|),    
                      例如正则表达式   "(public|protected|private)"   用于匹配Java三个访问控制符之一

               边界匹配符
                    ^               $                   \b                \B                    \A               \G                         \Z                    \z
                    行开头      行结尾           单词的边界   非单词的边界    输入的开头  前一个匹配的结尾   输入的结尾       输入的结尾
          
               数量标示符
                    支持的数量标示符有三种模式:
                         Greedy(贪婪模式)          :默认模式。贪婪模式的表达式会一直匹配下去,直到无法匹配为止。
                              eg:
                                   X?                                   X*               X+                X{n}               X{n,}                    X{n,m}
                                   X表达式出现零或一次      零或多次       一或多次      出现n次       最少出现n次          出现n次到m次

                         Reluctant(勉强模式)       :用问号后缀(?)表示,它只会匹配最少的字符。最小匹配模式
                              eg:
                                   X??                                   X*?          X+?               X{n}?               X{n,}?                    X{n,m}?
                                   零次或者一次                     零或多次  一或多次        出现n次          最少n次               出现n次到m次
                         Possessive(占有模式)     :用加号后缀(+)表示,通常比较少用。

           5.使用正则表达式

                    1.Pattern是不可变类,Pattern对象时正则表达式编译后再内存中的表示形式,可以供多个并发线程安全使用。
                    2.多个Matcher对象可以共享同一个Pattern对象。
                    3.Pattern,Mather 都位于 java.util.regex包中
                    4.定义了正则表达式之后,就可以使用Pattern和Matcher来使用正则表达式。

                    典型的调用顺序:
                          Pattern p = Pattern.compile("a*b");           //将一个字符串编译成Pattern对象
                          Matcher m = p.matcher("aaaab");             //使用Pattern对象创建Mather对象
                          boolean b = m.matches();                          //renturn true;          
                    如果正则表达式仅需要一次使用,可以直接使用Pattern类的静态matches方法,
                         会自动把指定字符串编译成匿名的pattern对象,并执行匹配,如:
                         boolean b = Pattern.matches("a*b", "aaaaab");          //返回true
  
                    【CharSequence接口:
                              CharSequence代表一个各种表示形式的字符串。
                              Pattern, Matcher, CharBuffer, String, StringBuffer, StringBuilder 都是它的实现类。
                         】

                    Matcher类提供的几个方法:
                         【通过Matcher类的find和group方法可以从目标字符串中依次取出匹配的子串】
                         【start和end方法主要用于确定子串在目标字符串中的位置】
                         【matches方法要求整个字符串和Pattern完全匹配时才返回true,
                              而lookingAt只要字符串以Pattern开头就会返回true。matches和lookingAt方法有些相似。
                                   另外,String类中也提供了matches方法,例如:
                                    "kongyeeku@163.com".matches("w(3,20)@\\w+\\.(com|org|cn|net|gov)");】
                         【replaceALl,replaceFirst两个方法在String类中也有,也可以实现相同的功能】
                          boolean find()                  //Attempts to find the next subsequence of the
                                                              // input sequence that matches the pattern.
                                                            //返回目标字符串中是否包含与Pattern匹配的子串。
                          String group()                  //Returns the input subsequence matched by the previous match.
                                                              //返回上一次与Pattern匹配的子串
                         int start()                       //Returns the start index of the previous match.
                                                            //返回上一次与pattern匹配的子串在目标字符串中开始的位置。
                         int end()                         // Returns the offset after the last character matched.
                                                            //返回上一次与Pattern匹配的子串在目标字符串中结束位置加1.
                         boolean lookingAt()       //返回目标字符串前面部分与Pattern是否匹配
                         boolean matches()         // 返回整个目标字符串与Pattern是否匹配
                         Matcher rest()               //可以将现有的Matcher对象应用于一个新的字符序列。
                         String replaceAll(String replacement)     //替换
                         String replaceFirst(STring replacement)     //替换
                         

程序国际化

          1.Internationalization
          2.Localization :本地化
          3.Java语言内核基于UNICODE2.1编码集
          4.Java开发工具提供了一些基本的本地化,国际化的类;
          5.思路:
               资源文件是     key-value对,key不变,value则随不同国家,语言而改变,值不需要使用双引号括起。
                资源文件的命名的三种形式:
                         baseName_language_country.properties
                         baseName_language.properties
                         baseName.properties
          6.Java的国际化三个类:
               java.util.ResourceBundle           //用于加载一个国家,语言资源包
               java.util.Locale                           //用于封装一个特定的国家/区域,语言环境
               java.text.MessageFormant           //用于格式化带占位符的字符串
          7.显示Java语言支持的国家/语言环境
               Locale 类中包含的静态方法:
                      public static Locale getDefault();      //得到系统默认的语言环境
                    public static Locale[] getAvailableLanguage();
                    public static String getDisplayCountry();
                    public static String getCountry();
                    public static String getDisplayLanguage();
                    public static String getLanguage();
          8.完成程序国际化
                    1.先编辑一系列针对不同语言的具有相同baseName的资源文件,
                                例如:mess_zh_CN.properties,mess_en_US_properties,,,,
                    2.对于非西欧字符的资源文件,在命令行窗口中使用java中的工具:   native2ascii
                         eg:          native2ascii mess_zh_CN.properties aa.properties
                         生成具有非西欧字符的UNICODE编码方式的properties文件,将其重命名需要的资源文件名规则。
                    3.程序(例子):
                                  .....
                                  Locale myLocale = Locale.getDefault();        
                                        //取得系统默认的国家语言环境
                                  ResourceBundle bundle = ResourceBundle.getBundle("mess" , myLocale);     
                                       //根据指定的语言环境加载资源文件
                                  System.out.println(bundle.getString("hello"));  
                                               //打印资源文件中取得的消息
                    4.重点方法:
                                   //根据Locale加载资源文件
                                     public static ResourceBundle getBundel(String baseName, Locale locale);
                             
          9.使用MessageFormat处理包含占位符的字符串
                    问题:如果需要处理输出的消息中包含动态内容的文本,文本的内容在程序执行后才能得到确认?
                    答案:将需要动态改变的内容使用占位符来处理。 
                    
                   1.{0},{1},,,,,                    占位符使用大括号括起来的数字表示,数字从0开始记数。占位符位于资源文件中的value中。
                   2.主要方法:
                              static String format(String pattern, Object... arguments);       // pattern表示资源文件中的key,arguments 表示占位符的代替。

          10.使用类文件代替资源文件
                    将所有的key-value对存入class文件,而不是属性文件,系统搜索class文件的优先级教高。
                    同时该文件必须满足条件:
                    1.类的名字必须为baseName_language_country,
                    2.该类必须继承 ListResourceBundle,并重写 getContents方法,该方法返回Object数组,该数组的每一个项都是key_value对。

          11.使用NumberFormat,DateFormat格式化数字,日期(位于java.text包中)
                                                   |——MessageFormat     (字符内容格式化)
                    Format(抽象类)  -----|—— NumberFormat(抽象类)   (数值格式化)     :可以实现数值和字符串之间的双向转换
                                                   |—— DateFormat           (日期格式化)     :可以实现日期和字符串之间的双向转换
                    
                    NumberFormat 和DateFormat都包含了 format,parse方法用于实现转换
                    获得NumberFormat对象的几个工厂方法:
                         public static NumberFormat   getCurrencyInstance      :    返回默认Locale的货币格式器,可传入指定Locale获取相应格式器
                         public static NumberFormat   getIntegerInstance         :     返回默认Locale的整数格式器,可传入指定Locale获取相应格式器
                         public static NumberFormat   getNumberInstance        :     返回默认Locale的通用数值格式器,....
                         public static NumberFormat   getPercentInstance        :     返回默认Locale的百分数格式器,.....
                    获得DateFormat对象的几个工厂方法:
                         public static DateFormat   getDateInstance      ;          格式化后的字符串只有日期,可以传入DateFormat.style,Locale参数
                         public static DateFormat   getTimeInstance      ;          格式化后的字符串只有时间
                         public static DateFormat   getDateTimeInstance      ;     格式化后的字符串有日期和时间
                         这3个方法都可以传入 DateFormat.style的四个静态常量:     FULL,LONG,MIDIUM,SHORT
                    使用NumberFormat类将字符串解析成数值的意义不大(可以使用Integer,Double包装类完成这种解析)
                    Java提供了 SimpleDateFormat,因为使用DateFormat类解析日期字符串不够灵活:
                         1.构造器:     
                                    public SimpleDateFormat(String pattern)
                                        :Constructs a SimpleDateFormat using the given pattern and the default date format symbols for the default locale.
                                        构造一个SimpleDateFormat需要一个模板, 模板占位符
                                             y:     m:     d:     h:     z:     ...
                                        pattern是一个使用日期字段占位符的日期模板。
                                   方法:
                                        public String format(Date d);       //继承自DateFormat中的方法。
                                        public  String toLocalizedPattern()
                    
                    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值