大学-Java课程-第八章 常用实用类

8.1 String 类

  • String 类是在java.long包中,由java.long包中的类默认引入,所以可以直接使用。
  • java把 String 类定义为 final 类,所以 String 类不能有子类。

8.1.1 构造 String 对象

    • 正常来讲输出对象是输出对象的引用,但是String对象输出是输出的是对象的内容即字符串。
    • 查看某个对象的引用HashCode函数,egint address = System.identityHashCode("你好")(这个就是把对象“你好”的引用赋值给address)
    • ==代表的是判断等号两边的引用是否相等。
    • 如果想要判断所给字符串是否符合所给正则表达式用matches方法。
  • 其中的对象与之前学的不通,String 类的对象可以是常量也可以是变量。(这里注意常量与变量在存储时是有很大区别的)
  1. 常量对象
    1. 例子:String s="你好"(没有用new开辟空间)
    2. 常量池:常量对象在内存中对应的位置。
      在这里插入图片描述
      1. 特点
        1. 每一个常量池中的引用和对应的字符串在程序运行当中都不会发生改变。
        2. 如果两个常量对象中的字符串相同,那么他们的引用也相同。
  2. String 对象
    1. 例子:String s =new String("We are students."),String t =new String("We are students.")(此处使用new平开辟一个动态区)
    2. 动态区
      在这里插入图片描述
      1. 注意
        1. 对象变量中储存着引用,可以随时更改其内容。
        2. 即使两个对象存放的字符串相同,但是引用不同。
        3. 变量池就是变量常量池就是常量,String的常量对象是在变量区创建对象,在常量池中使用常量的引用
          在这里插入图片描述

8.1.2 String 对象的并置

  • 并置
	String hello = "你好";
	String testOne = "你"+"好";//在编译之前就将这两个字符合并了
	String you = "你"String hi = "好";
	String testTwo = you+hi;
  • 注释
    • hello 的引用和 testOne 的引用相同(因为在编译之前就合并了,常量池就形成了相同的引用)
    • hello 的引用和 testTwo 的引用不相同,虽然他们两个的字符串相同,但是如果用两个变量并置的结果赋值给一个变量相同于new过。

8.1.3 String 类的常用方法

  1. public int length()
    1. 作用:获取一个 String 对象的字符长度。(注意这里是字符长度,不是字节长度
    2. 例子:
    String china = "1945年抗日胜利"
    int n1,n2;
    n1 = china.length();
    n2 = "小鸟fly".length();
    
    结果
    n1 = 9
    n2 = 5
    
  2. public boolean equals(String s)
    1. 作用:判断两个字符串的序列是否相等。
    2. 例子:
    String tom = new String("天道酬勤");
    String boy = new String("知心朋友");
    String jerry = new String("天道酬勤");
    boolean b1 = tom.equals(boy);
    boolean b2 = tom.equals(jerry);
    
    结果
    b1 = false
    b2 = true
    
  3. pulic boolean startsWith(String s)public boolean endWith(String s)
    1. 第一个方法作用:判断String对象的字符序列前缀是否是指点String对象s。
    2. 第二个方法作用:判断String对象的字符序列后缀是否是指定String对象s。
    3. 例子
    String tom = "天气预报,阴有小雨",jerry = "比赛结束,中国队赢得胜利"boolean b1 = tom.startsWith("天气");
    boolean b2 = jerry.startsWith("天气");
    boolean b3 = tom.startsWith("大雨");
    boolean b4 = jerry.startsWith("胜利");
    
    结果
    b1 = true
    b2 = false
    b3 = false
    b4 = true
    
  4. public int compareTo(String s)
    1. 作用:两个字符串比较大小,如果对象的字符串大就是整数,小就是负数,相同就是0.
  5. public boolean contains(String s)
    1. 作用:查看对象中是否包含字符串s。
  6. public int indexOf(String s)public int lastIndexOf(String s)
    1. 作用:字符串第一个位置的索引为0。第一个方法是从对象的0索引开始检查与s相同的字符(把该字符的首个字符所在的索引返回),第二个方法是从字符串末端开始检查(注意这个也是把该字符的首个字符所在的索引返回
    2. 这两个方法的重载方法:public int indexOf(String s,int startpoint) ,这个是从startpoint开始进行检索。
  7. public String substring(int startpoint)
    1. 作用:获得一个String对象,新的对象是从startpoint位置到最后位置。(注意这里的位置指的都是索引
    2. 重载方法:public String substring(int start,int end),此方法生成一个是从start开始到end-1处的字符串。
      1. 例子
    String tom = "我喜欢打篮球"String str = tom.substring(1,3);
    
    结果
    str="喜欢"
    注意:不是str="喜欢篮"
    
  8. public String trim()
    1. 作用:当前对象去掉前后 ,字符内的空格不去掉。

8.1.4 String 对象与基本数据的相互转换

  1. 将String对象转换为基本类型
    1. 例子
    int x;
    String s = "876";
    x = Integer.parseInt(s);
    
    1. 在 java.long 包中 Byte、Short、Integer、Long、Float、Double 的类中有相应的方法可以使String 类型的对象转换为基本数据。以下是其中的方法具体内容,如果想用此方法参照上边的例子。
    public static byte parseByte(String s) throws NumberFormatException//parseByte 是解析为byte型基本数据。 throws是抛出异常。 NumberFormatException 是数据解析异常。
    public static byte parseShort(String s) throws NumberFormatException
    public static byte parseLong(String s) throws NumberFormatException
    public static byte parseFloat(String s) throws NumberFormatException
    public static byte parseDouble(String s) throws NumberFormatException
    
  2. 将基本类型转换为String类型
    1. 方法一:利用 String 中的方法

      1. 例子:
      String str = String.valueOf(12313.9876);
      
      1. 具体的方法:
      public static String valueOf(byte n)
      public static String valueOf(int n)
      public static String valueOf(long n)
      public static String valueOf(float n)
      public static String valueOf(double n)
      
    2. 方法二:利用 不含内容的 String 对象与基本数据类型进行并置。

      String str = "" + 12313.9876;
      
  3. 基本型数据的进制表示
    1. 利用 Integer 和Long 类中的下列 static 方法返回整数进制的 String 对象(负数是补码)
      public static String toBinaryString(int i)
      public static String toOctalString(int i)
      public static String toHexString(int i)
      public static String toBinaryString(long i)
      public static String toOctalString(long i)
      public static String toHexString(long i)
      
  4. 关于 main()方法的参数转化
    1. 介绍:main() 方法中的参数之前没有使用过,其中的参数是能收到用户键盘输入的字符,一般在集成环境中无法使用,都是在系统的编译器进行运行时使用,例子
  5. 例子
public class Example8_4 {
   public static void main(String args[]) {
      //查看7的二进制
      int m = 7;
      String binaryString = Integer.toBinaryString(m);
      System.out.println(m+"的二进制:");
      System.out.println(binaryString);
      //查看-8的二进制
      m = -8;
      binaryString = Integer.toBinaryString(m);
      System.out.println(m+"的二进制(补码):");
      System.out.println(binaryString);
      
      double sum=0,item=0;
      boolean computable=true; 
      for(String s:args) {
         try{ item=Double.parseDouble(s);
              sum=sum+item;
         }
         catch(NumberFormatException e) {
              System.out.println("您键入了非数字字符:"+e);
              computable=false;
         }
      }
      if(computable) {
          System.out.println("sum="+sum); 
          String numberStr = String.valueOf(sum);
          int dotPosition = numberStr.indexOf(".");
          String integerPart = numberStr.substring(0,dotPosition);
          String decimalPart = numberStr.substring(dotPosition+1);
          System.out.println("整数部分是:"+integerPart); 
          System.out.println("小数部分是:"+decimalPart); 
      }
  }
}

8.1.5 对象的 String 对象表示

  1. 介绍:简单来说就是输出Object类中有一个方法,toSting()可以返回String对象的地址,同时此方法可以重写。返回的地址的格式:创建对象的类名@对象的引用
  2. 例子
    String s = new String("你好");
    System.out.println(s.toString());
    Syrtem.out.println(s);//作用都是相同的
    

8.1.6 String 对象与字符数组、字节数组

  1. String 对象与字符数组
    1. 方法
      1. 将字符串中的字符放进字符数组中:public void getChars(int start,int end,char c[],int offset)(将Sting对象解析成字符,从在数组c的offset位置开始存放,将String对象的start位置到end位置开始存放)
    2. 例子
      public class Example8_6{
         public static void main(String args[]) {
            char [] a,c; 
            String s="1945年8月15日是抗战胜利日";
            a=new char[4];
            s.getChars(11,15,a,0);
            System.out.println(a);
            c="十一长假期间,学校都放假了".toCharArray();
            for(int i=0;i<c.length;i++)
              System.out.print(c[i]);
         }
      }
      
  2. 字符序列与字节数组
    1. String 对象的构造方法:String(byte b [])(使用指定字节数组b创造一个String 对象)
    2. public byte[] getBytes():使用平台默认的编码值放进byte数组单元中,并返回byte数组的引用
      byy 3. 例子
      public class Example8_7 {
          public static void main(String args[]) {
             byte d[]="Java你好".getBytes(); //这里是按照系统自动的编码方式储存到数组d中,字母占一个字符,汉字占两个字符
             System.out.println("数组d的长度是:"+d.length);
             String hao=new String(d,6,2); //输出:好
             System.out.println(hao);
             String javaNi=new String(d,0,6);
             System.out.println(javaNi);   //输出:Java你
             String highByte=Integer.toBinaryString(d[7]);
             highByte = highByte.substring(highByte.length()-8);//只要后8位(bit)
             String lowByte=Integer.toBinaryString(d[6]);
             lowByte = lowByte.substring(lowByte.length()-8);//只要后8位(bit)
             System.out.println(hao+"的编码:");
             System.out.println(highByte+" "+lowByte);
          }
      }
      

8.2 正则表达式

8.2.1 正则表达式与元字符

  1. 正则表达式:有特殊意义的字符序列。

  2. public biilean matches(String regex)方法可以判断当前String对象的字符序列是否和判断regex相同

  3. 正则表达式元字符(这里有链接

  4. 方括号:该元字符代表方括号中的任意一个字符。

    [abc]:代表a、b、c中的任意一个。
    [^abc]:代表除了a、b、c之外的任意一个。
    [a-zA-Z]:代表英文字母大写或者小写中的任意一个。
    [a-d]:代表a到d中的任意一个。
    
    以下是嵌套方括号做并、交、差运算
    并:[a-d[m-p]]
    交:[a-z&&[def]]
    差:[a-f&&[^bc]]
    

8.2.2 常用的正则表达式(大概功能已经列出)

常用的正则表达式
匹配整数
匹配浮点型
匹配 E-mail 型
匹配身份证号码
匹配日期

8.2.3 字符序列的替换

  1. 字符序列替换用到的方法:public String replaceAll(String regex,String replacement)。方法的意思就是把对象中的 regex 字符替换成 replacement。此方法返回一一个新的String对象,注意替换前的对象内容不改变。
  2. 例子
    public class Example8_10 {
    	public static void main (String args[ ]) {
     
    	  	 // 创建一个String类对象
    	     String str = "培训学校的email:qinghua@sina.com.cn或zhang@163.com";
    	     // 写一个正则表达式
    	     String regex = "\\w+@\\w+\\.[a-z]+(\\.[a-z]+)?";
    	     System.out.println("清除\n"+str+"\n中的email地址");
    	     // 利用replace已发进行替换
    	     str = str.replaceAll(regex,"");
    	     System.out.println(str);
    	     
    	     // 类似以上的正则表达式的使用
    	     String money = "89,235,678¥";
    	     System.out.print(money+"转化成数字:"); 
    	     String s = money.replaceAll("[,\\p{Sc}]","") ; //\\p{Sc}匹配任何货币符号
    	     long  number = Long.parseLong(s);
    	     System.out.println(number); 
    	}
    }
    
    结果
    清除
    培训学校的email:qinghua@sina.com.cn或zhang@163.com
    中的email地址
    培训学校的email:或
    89,235,678¥转化成数字:89235678
    

8.2.4 字符序列的分解

  1. 分解方法:public String[] split(String regex)。这个就是把对象其中的regex前后的内容分解成String对象数组中。(注意如果regex前边没有字符,即也算为一个空字符
  2. 例子
    import java.util.Scanner; 
    public class Example8_11 {
    public static void main (String args[ ]) {
      System.out.println("一行文本:");
      Scanner reader=new Scanner(System.in);
      String str = reader.nextLine();
    //regex匹配由空格、数字和!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~组成的字符序列
      String regex = "[\\s\\d\\p{Punct}]+"; 
      String words[] = str.split(regex); 
      for(int i=0;i<words.length;i++){
         int m = i+1;
         System.out.println("单词"+m+":"+words[i]);
    		  }   
    	}
    }
    
    结果
    一行文本:
    你好呀!!! 132 你好
    单词1:你好呀!!!
    单词2:你好
    

8.3 StringTokenizer 类

  1. 介绍:在java.util包中,可以解析字符串。
  2. 方法
    1. StringTokenizer(String s)以默认字符作为分隔符(空格符、换行、回车符、制表符、进制符)
    2. StringTokenizer(String s,String delim)以delim作为分隔符
    3. nextToken()返回解析器中的字符串
    4. hasMoreTokens()判断解析器中是否还有字符串
    5. countTokens()查看解析器中还有几个单词
  3. 注意:解析器在解析字符串时,自己设定的分隔符是没有顺序的划分的,解析时不会看顺序,只要有这个字符就会划分单词。

8.4 Scanner 类

  1. 介绍:这也是一个可以做字符串解析的类,与StringTokenizer 类有相似之处。

  2. 用法

    1. 构造String对象,并放进scanner对象中。
      String NBA = "I love this game.";
      Scanner scanner = new Scanner(NBA);
      
    2. 用正则表达式设置分隔符
      useDelimiter(正则表达式);
      
    3. 返回所需数据类型的字符串
      next();//返回字符串类型
      nextIn();//返回int型
      nextDouble();//返回double类型
      hasNext();//判断是否还有字符串
      
      
  3. 例子
    GetPrice.java

    import java.util.*;
    public class GetPrice {
       public static double givePriceSum(String cost) {
          Scanner scanner = new Scanner(cost);
          scanner.useDelimiter("[^0123456789.]+"); //scanner设置分隔标记
          double sum=0;
          while(scanner.hasNext()){
             try{  double price = scanner.nextDouble();
                   sum = sum+price;
             } 
             catch(InputMismatchException exp){
                   String t = scanner.next();
             }   
          }
          return sum;
       }
    }
    

    Example8_13.java

    public class Example8_13 {
       public static void main(String args[]) {
          String cost = "市话76.8元,长途:167.38元,短信12.68元";
          double priceSum = GetPrice.givePriceSum(cost);
          System.out.printf("%s\n总价:%.2f圆\n",cost,priceSum);
          cost = "牛奶:8.5圆,香蕉3.6圆,酱油:2.8圆";
          priceSum = GetPrice.givePriceSum(cost);
          System.out.printf("%s\n总价:%.2f圆\n",cost,priceSum);
       }
    }
    

8.5 Pattern 类与 Matcher 类

8.6 StringBuffer 类

8.6.1 StringBuffer 类的对象

8.6.2 StringBuffer 类的常用方法

8.7 日期与时间

8.7.1 日期与时间类

8.7.2 日期、时间和日历类

8.7.3 日期格式化

8.8 Math 类、BigInteger 类和Random 类

8.8.1 Math 类

8.8.2 BigInteger 类

8.8.3 Random 类

8.8.4 数字格式化

8.9 Class 类与反射

8.9.1 Java 反射

8.9.2 使用 Class 实例化一个对象

8.10 Arrays 类、System 类和Console 类

8.10.1 Arrays 类

8.10.2 System 类

8.10.3 Console 类

8.11 应用举例

8.12 小结

8.13 课外读物

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值