黑马程序员——java之String以及常见对象


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

String

一、String概述:java.lang.String包中。

|---观察构造函数。

|---String方法

String类适用于描述字符串事物。

那么它就提供了多个方法对字符串进行操作。

常见的操作有哪些?

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 lastIndexOf(int ch) :返回指定字符在此字符串中最后一次出现处的索引

2,判断。

  2.1字符串中是否包含某一个子串。

     boolean contains(str):

      特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。

      所以,也可以用于对指定判断是否包含。

   if(str.indexOf("aa")!=-1)而且该方法即可以判断,可以获取出现的位置

    boolean  isEmpty():原理就是判断长度是否0.字符中是否有内容。

    boolean  startsWith(str);//字符串是否是以指定内容开头。

    boolean  endsWith(str);字符串是否是以指定内容结尾。

    boolean  equals(str);判断字符串内容是否相同。复写了Object类中equals方法。

boolean  equalsIgnoreCase();判断内容是否相同,并忽略大小写

3,转换

3.1将字符数组转成字符串。

 构造函数:String(char[])

  String(char[],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[])//将字节数组转成字符串。

String(byte[],offset,count):将字节数组中的一部分转成字串。

3.4 byte[] getBytes()://将字符串转成字节数组。

3.5 将基本数据类型转成字符串。

static String valueOf(int)

static String valueOf(double)

//3+"";//String.valueOf(3);

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

   4,替换

        String replace(oldchar,newchar);///不会改变原字符串

5,切割

    String[] split(regex); //切割后不包含regex串,用数组接收

6, String substring(begin);

String substring(begin,end); //子串。获取字符串中的一部分。包含头不包含尾

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

  7.1   String toUpperCase(); //将字符串转成写或则写。

        String toLowerCase(); //将字符串转成大写或则小写

  7.2   String trim(); //将字符串两端的多个空格去除。应用场景:邮箱地址空格输入

  7.3   int compareTo(string); //对两个字符串进行自然顺序的比较。返回值大于0,等于0,小于0的情况的解释。只在方法equals(Object)返回true 时才返回0

compareToIgnoreCase忽略大小写比较(原理就是全小写后再比较)

String s1 = "abc";//s1是一个类类型变量,"abc"是一个对象。

//字符串最大特点:一旦被初始化就不可以被改变。

String s2 = new String("abc");

//s1和s2有什么区别?

//s1在内存中有一个对象。

//s2在内存中有两个对象。

3、练习:

        1)去除字符串前后的空格。

        2)将字符串翻转。然后重载这个函数实现规定Index的翻转。注意java角标的习惯,从0开始,最后角标为length-1.

3)获取一个字符串在另一个字符串中出现的次数。

      "abkkcdkkefkkskk"

    思路:

         1,定义个计数器。

         2,获取kk第一次出现的位置。

         3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置。

          每获取一次就计数一次。

         4,当获取不到时,计数完成。

4获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。

   "abcwerthelloyuiodef

   "cvhellobnm"

  思路:

     1,将短的那个子串按照长度递减的方式获取到。

     2,将每获取到的子串去长串中判断是否包含,

     如果包含,已经找到!。

4、经验:字符串的各种操作必须熟练,达到不查阅API文档熟练应用,不然没人相信苦逼程序员有工作经验。重要可见一斑。今天老师讲功能尽量细分,便于修改。


StringBuffer

1、StringBuffer是字符串缓冲区。

是一个容器。

特点:

1,长度是可变化的。

2,可以字节操作多个数据类型。

3,最终会通过toString方法变成字符串。

C create U update R read D delete

1,存储。

StringBuffer append():将指定数据作为参数添加到已有数据结尾处。

StringBuffer insert(int index,数据):可以将数据插入到指定index位置。

2,删除。

StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end

StringBufferdeleteCharAt(index):删除指定位置的字符。

//sb.delete(0,sb.length());//清空缓冲区。

sb.deleteCharAt(2);//删一个

3,获取。

char charAt(int index)

int  indexOf(String str)

int  lastIndexOf(String str)

int  length()

String substring(int start, int end)

4,修改。

StringBuffer  replace(start,end,string);

    sb.replace(1,4,"java");//替换一段字符,注意被替换与替换长度可以不等

void setCharAt(int index, char ch)

  sb.setCharAt(2,'k');//替换一个字符

5,反转。

 StringBuffer   reverse();

6,将缓冲区中指定数据存储到指定字符数组中。

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

JDK1.5版本之后出现了StringBuilder.

     StringBuffer是线程同步。

     StringBuilder是线程不同步。

以后开发,单线程建议使用StringBuilder

升级三个因素:

1,提高效率。

2,简化书写。

3,提高安全性。

2、sb.append("abc").append(true).append(34);方法调用连。方法返回对象,继续调用方法。

StringBuffer总结:一段代码同一个容器内,其值是随时变化的,体现了同步性,牛逼。

经验证StringBuilder确实是非同步的,好用!适合单线程

Sop();伪代码,可以打印容器,不用toString();

基本数据类型对象包装类

byte          Byte

short         Short

int           Integer

long          Long

boolean      Boolean

float        Float

double        Double

char          Character

基本数据类型对象包装类的最常见作用

    就是用于基本数据类型和字符串类型之间做转换

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

基本数据类型+""

基本数据类型.toString(基本数据类型值);

如:Integer.toString(34);//34整数变成"34";

字符串转成基本数据类型。文本框全是字符串,这就是这个方法的用武之地。

xxx a = Xxx.parseXxx(String);

int a = Integer.parseInt("123");

double b = Double.parseDouble("12.23");

boolean b = Boolean.parseBoolean("true");

Integer i = new Integer("123");

int num = i.intValue();

十进制转成其他进制。

toBinaryString(int i);

toHexString();

toOctalString();

其他进制转成十进制。

parseInt(string,radix);//int x = Integer.parseInt("3c",16);

       1、 Integer x = new Integer("123");

           Integer y = new Integer(123);

           sop("x==y:"+(x==y));

           sop("x.equals(y):"+x.equals(y));

      2、Integer x = new Integer(4);

      JDK1.5新特性,方便书写

      Integer x = 4;//自动装箱。//new Integer(4)

  Integerx =null;//多了一个新值。

      x = x/* x.intValue() */ + 2;//x+2:x进行自动拆箱。变成成了int类型。和2进行加法运算。

       //再将和进行装箱赋给x

     3、Integer m = 128;

        Integer n = 128;

sop("m==n:"+(m==n));

Integer a = 127;

         Integer b = 127;

sop("a==b:"+(a==b));//结果为true。因为ab指向了同一个Integer对象。

       //因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新的空间。

system类


1.首先要是就是输入输出方法介绍一下他们区别
        System.out;//这个标准输出,输出
        System.err;//错误输出流,多使用出错和调试时
        后面可以接PrintStream的方法
        System.in; //键盘输入流,
    如果你用LOG4J记录日志的话,且设定错误等级的话  
   System.err的输出是将记录到日志中,
   说到这就有 重新分配,这个就跟IO流联系在一起

        system.setOut(printStream out);
        system.setErr(printStream err);
        system.setIn(InputStream in);
         /*想过没有System.in.read(), 还可以这么用*/
        关于System.in.read()方法
         http://bbs.itheima.com/thread-47834-1-1.html
        为什么我打印控制台输入的汉字都是乱码?
         http://bbs.itheima.com/thread-45950-1-1.html

2.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
    从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
       int[] a = {1,2,3,4};
      int[] b = new int[5];
      System.arraycopy(a,1,b,3,2);
     a数组源数组,b就是目的数组,从a[1]复制到b[3],从a[2]
     复制到b[4],最后那个一共复制2个,b的结果就是b[0,0,0,2,3]
      /*这里小心数组越界*/
     /*java System.arraycopy方法的问题*/
   System.arraycopy问题
http://bbs.itheima.com/thread-49796-1-1.html

3.currentTimeMillis方法 
   1970年1月1号0时0分0秒所差的毫秒数
   long start = System. currentTimeMillis();
         for(int i = 0;i < 100000000;i++){
                   int a = 0;

         }
         long end = System. currentTimeMillis();

         long  time = end – start
   运行多长时间这个for方法
4.exit方法  
   system.exit(0);正常退出;
   system.exit(status);
   该方法的作用是退出程序。
   其中status的值为0代表正常退,
   非零代表异常退出。

   假如你的JVM学习很好,你想考虑一下 sysetm.exit(-1);
   本人才疏学浅,不怎么会看源代码
5.gc方法
   System.gc();
   Runtime.getRuntime().gc()
   Runtime.gc()
   finalize与system.gc()
    http://bbs.itheima.com/thread-49797-1-1.html

   该方法的作用是请求系统进行垃圾回收。
   至于系统是否立刻回收,
   则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
6.getProperty方法

   System.getProperties();//所有的系统属性
   System.getProperty(String key);
   key 获取指定键指示的系统属性;
   该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示。
  1. package Test;

  2. import java.io.IOException;

  3. public class RuntimeDome {

  4.         public static void main(String[] args) throws Exception {
  5.                 
  6.                 //Runtime.exec()方法的所有重载。
  7.                 //这里要注意的有一点,就是
  8.                 //public Process exec(String [] cmdArray, String [] envp);
  9.                 Runtime.getRuntime().exec("cmd");
  10.                 
  11.                 //默认值 64兆         java -cp ClassPath -Xmx512m ClassName,
  12.                 //那么最大内存就是512*1024*0124字节
  13.                 System.out.println(""+Runtime.getRuntime().maxMemory());
  14.                 
  15.                 
  16.                 //status - 终止状态。
  17.                 //按照惯例,非零的状态码表明非正常终止。
  18.                 //如果已经调用了 exit(System.exit 也一样)方法,
  19.                 //那么该状态码将重写已传递至此方法的状态码
  20.                 Runtime.getRuntime().halt(0);
  21.         }

  22. }

Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。

    1.exit 和 falt相同方法
         system.exit(int status);
         Runtime.getRuntime().exit(int status);
         Runtime.getRuntime().halt(int status);
         status - 终止状态。按照惯例,非零的状态码表明非正常终止。如果已经调用了 exit(System.exit 也一样)方法,那么该状态码将重写已传递至此方法的状态码
    2.getRuntime();
         以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法
         Runtime.getRuntime().exit(int status);
         Runtime.getRuntime().halt(int status);
    3.maxMemory()
         Runtime.getRuntime().maxMemory();
         默认值 64兆
         java -cp ClassPath -Xmx512m ClassName,那么最大内存就是512*1024*0124字节
         其实还有 totalMemory和reeMemory()有需要就去百度吧
    4.exec方法  
         Runtime.exec()方法的所有重载。这里要注意的有一点,
         就是public Process exec(String [] cmdArray, String [] envp);
         这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,
         envp我个人感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式
  1. <p>package Test;</p><p>import java.io.IOException;</p><p>public class RuntimeDome {</p><p> public static void main(String[] args) throws Exception {
  2.   
  3.   //Runtime.exec()方法的所有重载。
  4.   //这里要注意的有一点,就是
  5.   //public Process exec(String [] cmdArray, String [] envp);
  6.   Runtime.getRuntime().exec("cmd");
  7.   
  8.   //默认值 64兆  java -cp ClassPath -Xmx512m ClassName,
  9.   //那么最大内存就是512*1024*0124字节
  10.   System.out.println(""+Runtime.getRuntime().maxMemory());
  11.   
  12.   
  13.   //status - 终止状态。
  14.   //按照惯例,非零的状态码表明非正常终止。
  15.   //如果已经调用了 exit(System.exit 也一样)方法,
  16.   //那么该状态码将重写已传递至此方法的状态码
  17.   Runtime.getRuntime().halt(0);
  18. }</p><p>}

Date类

      构造方法
      Date date1 = new Date();当前时间
      Date date2 = new Date(long date);
      与这个结合 
      long date=system.currentTimeMillis();
      long date=date.getTime()  
      after(Date when) 
          测试此日期是否在指定日期之后。 
      before(Date when) 
          测试此日期是否在指定日期之前。 
      compareTo(Date anotherDate) 
          比较两个日期的顺序。 
      equals(Object obj)  
       比较两个日期的相等性
  1. import java.util.Date;
  2. import java.util.Random;


  3. public class DateTest {
  4.         
  5.         public static void main(String[] args) {
  6.                 //当前时间 
  7.                 Date date = new Date();
  8.                 //after(Date when) 
  9.                 //测试此日期是否在指定日期之后。
  10.                 Date dateAfter = new Date(date.getTime()-1000);
  11.                 if(date.after(dateAfter)){
  12.                         System.out.println(dateAfter+"是在"+date+"之后");
  13.                 }
  14.                 //before(Date when) 
  15.         //测试此日期是否在指定日期之前。
  16.                 Date beforeDate = new Date(date.getTime()+1000);
  17.                 if(date.before(beforeDate)){
  18.                         System.out.println(beforeDate+"是在"+date+"之后");
  19.                 }
  20.                 //compareTo(Date anotherDate) 
  21.                 //比较两个日期的顺序。 
  22.                 Date randomDate = new  Date(date.getTime()+1000);
  23.                 //如果参数 Date 等于此 Date,则返回值 0;
  24.                 //如果此 Date 在 Date 参数之前,则返回小于 0 的值;
  25.                 //如果此 Date 在 Date 参数之后,则返回大于 0 的值
  26.                 if(date.compareTo(randomDate)>0){
  27.                         System.out.println(date+"大于"+randomDate);
  28.                 }else{
  29.                         System.out.println(date+"小于"+randomDate);
  30.                 }
  31.                 Date eqDate = new Date(date.getTime());
  32.                 //        equals(Object obj)  
  33.                 //比较两个日期的相等性        \
  34.                 if(date.equals(eqDate)){
  35.                         System.out.println("日期相通");
  36.                 }
  37.         }
  38. }
复制代码
2、DateFormat 类
      构造方法
      DateFormat df = new DateFormat();
      String format(Date date) 
          将一个 Date 格式化为日期/时间字符串。
      Date parse(String source) 
          从给定字符串的开始解析文本,以生成一个日期。
      Calendar getCalendar()  
       获取与此日期/时间格式器关联的日历。
      void setCalendar(Calendar newCalendar) 
          设置此日期格式所使用的日历。

      TimeZone  getTimeZone()
       获取时区。 
      void setTimeZone(TimeZone zone) 
          为此 DateFormat 对象的日历设置时区。 


3、SimpleDateFormat类型 是DateFormat的子类
      Date parse(String text, ParsePosition pos) 
          解析字符串的文本,生成 Date。 
      StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) 
          将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。
  1. import java.text.DateFormat;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.TimeZone;


  5. public class DateFormatAndSimpleDateFormat {

  6.         
  7.         public static void main(String[] args)  throws Exception {
  8.                 //构造方法
  9.                 DateFormat df =  DateFormat .getInstance();
  10.                 
  11.                 //将一个 Date 格式化为日期/时间字符串。
  12.                 Date date = new Date();
  13.                 String Str2Date = df.format(date); 
  14.                 System.out.println("日期编程字符串:"+Str2Date);          
  15.                 
  16.                 //从给定字符串的开始解析文本,以生成一个日期。
  17.                 Date date2Str = df.parse(Str2Date); 
  18.                 System.out.println("字符串编程日期"+date2Str);        
  19.                 
  20.                 //获取与此日期/时间格式器关联的日历。
  21.                 Calendar calendar  =df.getCalendar();
  22.                 calendar.add(Calendar.YEAR, 1);
  23.                 System.out.println("变成日历:"+calendar.getTime());
  24.                 
  25.                 //设置此日期格式所使用的日历。
  26.                 //当前时间
  27.                 Calendar calendar1 = Calendar.getInstance();
  28.                 df.setCalendar(calendar1);
  29.                 System.out.println("改变日历"+calendar.getTime());
  30.                 
  31.                 //获取时区。 
  32.                 TimeZone timeZone = df.getTimeZone();
  33.                 System.out.println("获取时区"+timeZone.getID());
  34.                 
  35.                 //为此 DateFormat 对象的日历设置时区。
  36.                 df.setTimeZone(timeZone); 
  37.                 System.out.println("修改时区"+timeZone.getID());


  38.         }

  39. }
复制代码
4、Calendar 类型

      Calendar rightNow = Calendar.getInstance();
       Date getTime() 
          返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
       void setTime(Date date) 
          使用给定的 Date 设置此 Calendar 的时间。
  
      boolean isSet(int field) 
          确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况   
       void clear() 
          将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。

      set方法
      设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
       设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
       设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
      add(int field, int amount) 
          根据日历的规则,为给定的日历字段添加或减去指定的时间量
  1. import java.util.Calendar;
  2. import java.util.Date;


  3. public class CalendarDome {

  4.         public static void main(String[] args) {
  5.                 //new 一个日历类型
  6.                 Calendar rightNow = Calendar.getInstance();

  7.                 //返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
  8.                 Date date =rightNow.getTime(); 
  9.                 System.out.println("rightNow 变成时间类型"+date);
  10.                 
  11.                 // 使用给定的 Date 设置此 Calendar 的时间。
  12.                 Date  Afterdate = new Date(date.getTime()+10000000);
  13.                 rightNow.setTime(Afterdate);
  14.                 System.out.println("修改之后的时间:"+rightNow.getTime()); 
  15.                                  
  16.                 //                set方法
  17.                 //                设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
  18.                 //                 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
  19.                 rightNow.set(Calendar.MONTH, 1);
  20.                 System.out.println("set方法1:"+rightNow.getTime());
  21.                 rightNow.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH+1);
  22.                 System.out.println("set方法2"+rightNow.getTime());
  23.                 rightNow.set(Calendar.YEAR , Calendar.MONTH,Calendar.DAY_OF_MONTH, Calendar.HOUR_OF_DAY, Calendar.MINUTE);
  24.                 System.out.println("set方法3"+rightNow.getTime());
  25.                 
  26.                 //add(int field, int amount)       
  27.                 //根据日历的规则,为给定的日历字段添加或减去指定的时间量
  28.                 rightNow.add(Calendar.YEAR, 2);
  29.                 System.out.println("add方法1"+ rightNow.getTime());
  30.                 
  31.         //将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
  32.                   rightNow.clear();
  33.                   System.out.println(rightNow.getTime());


  34.         }
  35. }
复制代码
5、date 类型和SimpleDateFormate类转化
      SimpleDateFormate sdf = new SimpleDateFormate("yyyy-MM-dd");
      Date date = new Date();
      String StrDate=sdf.formate(date);
      Date date1 = sdf.parse(StrDate);
      这叫做日期的格式化
6、Date类和SimpleDateFormate类中都有比较时间的方法
      Date 类型 和 Calendar类型转化
      Calendar new = Calendar.getIntance();
       Date date =new.getTime();
      Calendar now1 = Calendar.getInstance();
      Date date = new Date(111111222);
      now1.setTime(date);
      为了时间计算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值