黑马程序员--常用API(String、基本数据类型的包装类、System、Runtime、Date、Calendar、Math)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

String类
String类适用于描述字符串事物。
那么它就提供了多个方法对字符串进行操作。
特性:是常量,一旦被初始化就不能被改变。

String s1=”abc”;
String s2=new String(“abc”);
这两种构造方式的区别是:
s1在内存中有一个对象
s2这句话在内存中产生了两个对象 “abc”是一个对象,通过new操作符又生成了一个对象。

常见操作有哪些呢?
1.获取

1.1 根据字符串中包含的字符数,也就是字符串的长度
    int length()://获取长度
1.2 根据位置获取位置上的某个字符。
    char charAt(int index)
1.3 根据字符获取该字符在字符串中的位置。
    int indexOf(int ch):返回的是ch在字符串中第一次出现的位置
    int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中第一次出现的位置

    int indexOf(String str):返回的是str在字符串中第一次出现的位置
    int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中第一次出现的位置

    int lastIndex(String str):返回str在字符串中最右边出现的索引

2.判断

2.1 字符串中是否包含某一个子串
    boolean contains(String str);
    特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于判断是否包含指定字符串。而且该方法既可以判断,又可以获取位置。
2.2 字符串中是否有内容
    boolean isEmpty();  原理就是判断长度是否为0  ""是一个对象 null是指向空  //1.6版本开始
2.3 字符串是否是指定内容开头
    boolean startWith(String str);
2.4 字符串是否是以指定内容结尾
    boolean endWith(String str);
2.5 判断字符串的内容是否相同,复写了Object类中的equals方法
    boolean equals(String str);
2.6 判断内容是否相同,并忽略大小写
    boolean equalsIgnoreCase(String str);

3.转换

3.1 将字符数组转成字符串
    构造函数:String(char[] c)
              String(char[] c,int offset,int count) 将字符数组中的一部分转换成字符串  offset是起始位子 count是个数
    静态方法:
              static String copyValueOf(char[]);
              static String copyValueOf(char[] data, int offset, int count);

              static String valueOf(char[]);
3.2 将字符串转成字符数组   ****重点
        char toCharArray();
3.3 将字节数组转换成字符串
        String(byte[] c)
        String(byte[] c,int offset,int count)将字节数组中的一部分转换成字符串
3.4 将字符串转换成字符数组
        byte[] getBytes();
3.5 将基本数据类型转换成字符串
    static String valueOf(int);
    static String valueOf(double);

    特殊:字符串和字节数组在转换过程中是可以指定编码表的。

4.替换

String replace(char oldchar,char newchar);
String replace(CharSequence target, CharSequence replacement) //将老字符串替换成新字符串

5.切割

String[] split(String regex);

6.子串

String substring(int beginIndex) 从指定位置开始到结尾,如果角标不存在,则出现角标越界错误
String substring(int beginIndex, int endIndex) 含头不含尾 

7.转换,去除空格,比较

7.1 将字符串转换成大写或小写
    String toUpperCase();
    String toLowerCase();
7.2 将字符串两端的多个空格去除
    String trim();
7.3 将两个字符串进行自然顺序的比较。
    int compareTo(String str); 

字符串的一个综合练习:

/*
需求:获取两个字符串中的最大子串
"adddhellodfghrvbny"
"dfdfhellof"

思路:
1.将短的那个按照长度递减的方式获取到
2.将没或取到的子串去长串中判断是否包含。如果包含,已经找到。
*/
class StringTest3 
{
    public static void main(String[] args) 
    {
        String s2="adddhellodfghrvbny";
        String s1="dfdfhellof";
        System.out.println(getMaxSubstring(s1,s2));
    }

    public static String getMaxSubstring(String s1,String s2)
    {
        String max=(s1.length()>s2.length())?s1:s2;
        String min=(max==s1)?s2:s1;
        for (int i=0; i<min.length(); i++)
        {
            for (int j=0,k=min.length()-i; k!=min.length()+1; j++,k++)
            {
                String temp=min.substring(j,k);
                if(max.contains(temp))
                    return temp;
            }
        }
        return "";
    }
}

StringBuffer、StringBuilder类

StringBuffer是一个字符串缓冲区,是一个容器。

1.而且长度是可变的
2.可以直接操作多个数据类型
3.最终会通toString方法变成字符串

对于容器的功能无外乎CURD
C create U update R read D delete 增删改查
StringBuffer对字符串的主要操作:
1.存储

StringBuffer append();将指定数据添加到已有数据的结尾处
StringBuffer insert(index,数据):可以将数据插入到指定index位置

2.删除

StringBuffer delete(int start,int end):删除缓冲区中的数据,含头不含尾
sb.delete(0,stringBuffer.length());//清空缓冲区

StringBuffer deleteCharAt(int index):删除指定位置的元素

3.获取

char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)

4.修改

替换 
 StringBuffer replace(int start, int end, String str)
 void setCharAt(int index, char ch) 替换某一位字符

5.反转

StringBuffer reverse();

6.将缓冲区中的指定数据存储到指定数组中

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

StringBuffer与StringBuilder的区别:

StringBuffer 与StringBuilder里面的方法与功能都一样但是StringBuffer是线程同步的,即在多线程操作同一个StringBuffer对象时,A操作时,B不可以操作,B操作时A不能操作
StringBuilder是线程不同步的,效率比StringBuilder高。
在单线程程序中,建议使用StringBuilder因为高效。
多线程程序中,建议使用StringBuffer,也可以使StringBuilder但是要自己加锁。

系统的升级围绕着一下三方面进行:

1.提高安全性
2.提高效率
3.简化书写

基本数据类型的包装类:
java中的基本数据类型都有其包装类。

  基本数据类型     引用数据类型
   byte             Byte
   short            Short
   int              Integer
   long             long
   float            Float
   char             Character
   boolean          Boolean
   double           Double

基本数据类型包装类最常见的作用就是用于基本数据类型和字符串类型之间的转换。

基本数据类型转换成字符串:

  基本数据类型+“”
  基本数据类型.toString(基本数据类型值)

字符串转换成基本数据类型

  ***.Parse***(***类型字符串);
eg:Integer.ParseInt()

进制转换

十进制–其他进制

toBinaryString();二进制
toOctolString();八进制
tohexString();十六进制 

其他进制–十进制

parseInt(string,进制);

System类
System类 :类中的方法和属性都是静态的。

out:标准输出,默认是控制台。
in:标准输入,默认是键盘

描述系统的一些信息
获取系统属性信息
static Properties getProperties() 确定当前的系统属性。

使用System类获取系统信息:

import java.util.*;
class  SystemDemo
{
    public static void main(String[] args) 
    {
        Properties prop=System.getProperties();
        //Properties是Hashtable的子类,直接使用迭代器获取信息。

        //如何在系统中自定义一些特有数据信息呢?
        System.setProperty("mykey","myvalue");

        //获取指定属性信息。
        String value=System.getProperty("os.name");

        System.out.println("value="+value);


        //获取所有属性信息
        Set keySet=prop.keySet();
        for(Iterator it=prop.keySet().iterator();it.hasNext();)
        {
            Object s=it.next();
            System.out.println(s+"...."+prop.get(s));
        }
    }
}

Runtime类
Runtime类
该类没有提供构造函数,说明该类不可以new对象,那么会直接想到该类中的方法都是静态的,发现该类中还有非静态方法,说明该类肯定会提供方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。
有这个特点可以看出该类使用了单例设计模式。
该方法是static Runtime getRuntime();
Runtime可以在运行时直接执行.exe文件:

class RuntimeDemo 
{
    public static void main(String[] args) throws Exception
    {
        Runtime r=Runtime.getRuntime();

        //Process p=r.exec("K:\\QQ.exe");//该方法可以运行指定目录下的.exe文件
        Process p=r.exec("notepad.exe RuntimeDemo.java"); //新建一个记事本,并把RuntimeDemo.java里面的内容存进去

        //p.distroy();  //关闭进程
    }
}

Date类
Date 表示特定的瞬间,精确到毫秒。
将时间格式化输出:

    public static void main(String[] args) 
    {
        Date d=new Date();
        System.out.println(d);//打印的时间看不懂,希望有些格式
        //将时间格式化
        DateFormat df=new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
        String s=df.format(d);
        System.out.println(s);
    }

Calendar类
此类事个抽象类,想要使用必须通过getInstance()获取一个实例

    Calendar c=Calendar.getInstance();
    c.get(Calendar.YEAR)//获取年
    c.get(Calendar.MONTH)+1)//获取月
    c.get(Calendar.DAY_OF_MONTH)//获取日
    c.get(Calendar.DAY_OF_WEEK))//获取1代表星期日

    c.set(2013,2,8);//将时间设置为2013年3月8日
    c.add(Calendar.DAY_OF_MONTH,-19);在当前日期上加减天数

两个练习:

1.获取任意年的二月有多少天。
思路:根据指定年设置一个时间就是 
    c.set(year,2,1).
    c.add(Calendar.Day_OF_MONTH,-1)//3月1日。往前推一天,就是2月的最后一天
2.获取昨天的现在这个时刻。
    c.add(Calendar.DAY_OF_MONTH,-1);

Math类
Math 类包含用于执行基本数学运算的方法。是个工具类。
必须要掌握的方法:
ceil(18.9); //返回大于指定数据的最小整数
Math.floor(11.1);//返回小于指定数据的最大整数
Math.round(12.3);//四舍五入
Math.pow(2,3); //计算2的三次方

重点方法:

    //重点方法
    double d=Math.random();//生成包含0不包含1的伪随机数(算法生成的数)
    int i=(int)(Math.random()*10+1);//生成1-10的随机数

    //生成1-10随机数另一种方式
    Random r=new Random();
    int i1=r.nextInt(10)+1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值