Java基础系列五之API

对象数组

定义:用来存储对象的数组
 

 Student[] student = new Student[5] ;

Arrays:针对数组操作的工具类  (提供了针对数组排序的方法和二分搜索法)

 public static String toString(int[] a):可以将int类型的数组转换成字符串 ([元素1,元素2,元素3...])

public static void sort(int[] a)对指定的 int 型数组按数字升序进行排序

public static int binarySearch(int[] a,int key):二分搜索法: 在int类型的数组a中查找key元素所对应的索引

代码示例

public class ArraysDemo {
	
	public static void main(String[] args) {
		
		//定义一个数组:静态初始化
		int[] arr = {24,69,80,57,13} ;
		
		//public static String toString(int[] a):可以将int类型的数组转换成字符串 ([元素1,元素2,元素3...])
		//直接用Arrays去调用
		String str = Arrays.toString(arr) ;
		System.out.println("str:"+str);
		//[24, 69, 80, 57, 13]
		
		System.out.println("-----------------------");
//		public static void sort(int[] a)对指定的 int 型数组按数字升序进行排序
		Arrays.sort(arr);//按数组升序排序
		String str2 = Arrays.toString(arr) ;
		System.out.println("str2:"+str2);
		System.out.println("-----------------------");
		
		//public static int binarySearch(int[] a,int key):二分搜索法: 
		//在int类型的数组中查找key元素的索引
		//需求:查找57元素对应的索引
	    //Arrays.sort(arr);
		int index = Arrays.binarySearch(arr, 57) ;
		System.out.println("index:"+index);
		int index2 = Arrays.binarySearch(arr, 577) ;
		System.out.println("index2:"+index2);
	
	}
}

Arrays两个常用方法的源码分析

//int[] arr = {24,69,80,57,13} ;

public static String toString(int[] a)
//toString(int[] a)的源码

//以后在实际开发中,只要有引用类型,在对引用类型数据进行操作的时候,对引用类型的对象进行非空判断,
//防止空指针异常(NullPointerException)

public static String toString(int[] a) {
        if (a == null) //对数组进行非空判断
            return "null";
        int iMax = a.length - 1; //arr.length-1   //a--->arr
        if (iMax == -1)
            return "[]";

        StringBuilder b = new StringBuilder();  //创建了一个字符串缓冲区
        b.append('[');			//先追加了左中括号:[
        for (int i = 0; ; i++) {
            b.append(a[i]);		//给缓冲区中追加数组中的元素
            if (i == iMax)
                return b.append(']').toString();	//返回并且并追加了右中括号:]并且将数据元素转换为字符串
            b.append(", ");							//如果不是最后一个索引,那么中间追加逗号
            
            //if(i == iMax){
            //	 return b.append(']').toString();
            //}else{
            	// b.append(", ");
            //}
        }
    }
    
    
 public static int binarySearch(int[] a,int key)
 //它的源码:
 public static int binarySearch(int[] a, int key) {//a--->arr	key-->577
        return binarySearch0(a, 0, a.length, key);
    }
    
    /**
    	a--->arr:指定的int类型的数组
    	fromIndex:指定索引开始:0
    	toIndex:arr.length 5 
    	key:577
    */
    	nt[] arr = {13,24,57,69,80} ;
     private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;     //最小索引
        int high = toIndex - 1;//  最大索引  4

        while (low <= high) { //如果最小索引小于=最大索引  
            int mid = (low + high) >>> 1;  >>> :无符号右移动(位运算符)    //中间索引:mid = 2 ,3 ,4 
            								位^:位异或
            								位&:位与
            								位|:位或
            								<< :左移动
            								有符合的数据表示法(原码,反码,补码)
            								计算机底层运算数据的时候:通过补码进行运算的
            int midVal = a[mid];		//	查找中间索引对应的元素:arr[2] = 57   69  80 

            if (midVal < key)			//判断:中间索引对应的元素 < key =577
                low = mid + 1;		//low = mid + 1;   mid = (取到最大的mid的值) 4+1 = 5 
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.    // return  -(low+1) = -6
    }

Calendar类:

 Calendar 类是一个日历类(抽象类),它的作用是为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历

字段之间进行转换提供方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

 是一个抽象类,如何实例化?

 public static Calendar getInstance() :通过一个静态功能来创建日历类的对象

代码示例

public class CalendarDemo {

	public static void main(String[] args) {

		// 创建日历类的对象
		// Calendar rightNow = new Calendar() ; 不能实例化
		Calendar rightNow = Calendar.getInstance();
		// System.out.println(rightNow);

		// public int get(int field)返回给定日历字段的值
		// 获取年:public static final int YEAR
		int year = rightNow.get(Calendar.YEAR);

		// 获取年中的月份:public static final int MONTH
		int month = rightNow.get(Calendar.MONTH);

		// public static final int DATE :获取月份的那一天
		int date = rightNow.get(Calendar.DATE);

		System.out.println(year + "年" + (month + 1) + "月" + date + "日"); // 通过日历类获取当前系统时间
	}
}

Calendar中的两个常用方法:

 public abstract void add(int field,int amount)根据日历的规则,给指定的日历字段添加或减去指定的时间量 (这个方法常用)

 public final void set(int year, int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

public class CalendarDemo2 {

	public static void main(String[] args) {

		// 算出当前时间
		Calendar c = Calendar.getInstance();// 实例化Calendar类,创建Calendar类的对象

		// 年
		int year = c.get(Calendar.YEAR);

		// 月
		int month = c.get(Calendar.MONTH);

		// 日
		int date = c.get(Calendar.DATE);

		System.out.println(year + "年" + (month + 1) + "月" + date + "日");

		// 需求:3年前的今天
		/*
		 * c.add(Calendar.YEAR, -3); //获取年 year = c.get(Calendar.YEAR) ;
		 * System.out.println(year+"年"+(month+1)+"月"+date+"日");
		 */

		// 需求:5年后的10天前
		c.add(Calendar.YEAR, 5);
		c.add(Calendar.DATE, -10);

		// 获取年
		year = c.get(Calendar.YEAR);
		date = c.get(Calendar.DATE);
		System.out.println(year + "年" + (month + 1) + "月" + date + "日");

		System.out.println("------------------------------");
		// public final void set(int year, int month,int date)设置日历字段 YEAR、MONTH 和
		// DAY_OF_MONTH 的值
		c.set(2018, 5, 20);
		// 获取年
		year = c.get(Calendar.YEAR);
		// 获取月
		month = c.get(Calendar.MONTH);
		// 获取日
		date = c.get(Calendar.DATE);
		System.out.println(year + "年" + (month + 1) + "月" + date + "日");
	}
}

需求:获取任意一年的二月份天数  (改进:键盘录入一个年份)

 分析:

  1)键盘录入任意一个年份

  2)创建日历类对象

  3)设置年月日

     set(录入year,2,1) ; //实际是3月1日

  4)再利用add(int field,int amount) : 在这里只需要将日期往前退一天即可

代码示例

public class CalendarTest {

	public static void main(String[] args) {

		// 创建键盘入对象
		Scanner sc = new Scanner(System.in);

		// 录入数据
		System.out.println("请输入一个年份:");
		int year = sc.nextInt();

		// 创建日历类对象
		Calendar c = Calendar.getInstance();
		// 设置年月日
		c.set(year, 2, 1); // 实际为3月1日
		// 只需要将日期往前推一天即可
		c.add(Calendar.DATE, -1);3月1日往前退一天为2月29日或者2月28日,实际将日期设置为**年2月29或者2月28日

		System.out.println("二月有:" +c.get(Calendar.DATE) + "天");
	}
}

System类

 System类包含一些有用的类字段和方法。它不能被实例化。 

常用的方法:

public static void gc()运行垃圾回收器。 

public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码;  一般情况,需要终止

Jvm,那么参数为0

public static long currentTimeMillis()返回以毫秒为单位的当前时间

                        public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length)

               从指定源数组中复制一段数组元素,复制操作从指定的位置开始,到目标数组的指定位置结束
               src:原数组
               dest:目标数组
               srcPos :原数组的开始位置

               destPos:目标数组的结束位置

代码示例

public class SystemDemo2 {

	public static void main(String[] args) {
		System.out.println("我们喜欢高圆圆....");
		// public static void exit(int status)

		// System.exit(0); //jvm已经退出了
		System.out.println("我们也喜欢杨桃....");
		System.out.println("-----------------------");
		// public static long currentTimeMillis()返回以毫秒为单位的当前时间
		long time = System.currentTimeMillis();
		System.out.println("tiem:" + time);

		// 单独使用,没有意义
		// 一般情况,来测试一段代码的执行效率 (后面:jdbc: PreparedStatement Statement
		// 也可以用currentTimeMillis来测试速率 )

		long start = System.currentTimeMillis();

		for (int x = 0; x < 1000; x++) {
			System.out.println("hello" + x);
		}

		long end = System.currentTimeMillis();

		System.out.println("共耗时:" + (end - start) + "毫秒");

		System.out.println("---------------------------");

		int[] arr1 = { 11, 22, 33, 44, 55, 66 };
		int[] arr2 = { 5, 6, 7, 8, 9, 10 };

		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));
		System.out.println("---------------------------");

		System.arraycopy(arr1, 1, arr2, 2, 2);

		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));

	}
}

public static void gc()运行垃圾回收器。 public static void exit(int status)终止当前正在运行的 Java 虚拟机。

参数为状态码, 一般情况下,需要终止 Jvm(Java虚拟机),那么参数为0

代码示例

public class Person {

	private String name;
	private int age;

	public Person() {
		super();
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}

	@Override
	protected void finalize() throws Throwable {
		System.out.println("开始回收不用的对象了:" + this);
		super.finalize();
	}

}
public class SystemDemo {


	public static void main(String[] args) {


		// 创建一个Person类的对象
		Person p = new Person("高圆圆", 27);
		System.out.println(p);
		// 让对象p不指定堆内存了
		p = null;
		System.gc(); // 运行垃圾回收器,实质是执行的finalize()方法
	}
}

Date类

java.util.Date:

类 Date 表示特定的瞬间,精确到毫秒

构造方法:

         public Date()表示分配它的时间(精确到毫秒)。

   public Date(long date):创建一个日期对象,指定毫秒值 (需要将long类型所对应的时间毫秒值转换成Date对象)
 

  public void setTime(long time):设置毫秒值

代码示例

构造方法

public class DateDemo {
	
	public static void main(String[] args) {
		
		Date d = new Date() ;
		System.out.println(d); //Date类型的日期格式:Sun Apr 29 11:22:47 CST 2018	
								//Date的文本格式:  String :2018-4-29
		
		Date dd = new Date(1000) ;
		System.out.println(dd);
	}
}
package org.westos.d_date;

import java.util.Date;

/**
 * public long getTime() 将Date--->long类型的毫秒值
 * 
 * @author Administrator
 *
 */
public class DateDemo2 {

	public static void main(String[] args) {

		// 创建日期类对象
		Date d = new Date();
		long time = d.getTime();
		System.out.println(time);
		// System.out.println(System.currentTimeMillis());

	}
}

重点:Date的日期格式和文本格式(String类型)之间进行转换

Date---->String(格式化)

String-->Date(解析)

中间的转换:使用中一个中间类:DateFormat,并且DateFormat是一个抽象类,抽象意味着不能实例化,所以应该考虑用它的子类:

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析

(文本 -> 日期)和规范化。

SimpelDateFormat的构造方法:

   public SimpleDateFormat(String pattern) :构造一个SimpleDateFormat对象,根据pattern(模式:规则)
 
   SimpleDateFormat sdf = new SimpleDateFormat("xxx年xx月xx日") ;
  
   日期和时间模式
   
    年: yyyy
    月: MM
    日: dd
  
    时: hh
    分: mm
   秒: ss
 
 实际开发中:牵扯时间的东西,经常Date--String  String--Date

代码示例

public class DateDemo3 {

	public static void main(String[] args) throws ParseException {

		// Date---String:(格式化)
		// 创建一个日期对象
		Date d = new Date();
		// 创建SimpleDateFormat类对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		// public final String format(Date date):格式化
		String str = sdf.format(d);
		System.out.println("str:" + str);

		System.out.println("----------------------");

		// String:日期文本格式:---->Date:日期格式
		// public Date parse(String source):解析
		String strDate = "2018-6-25";
		// 创建SimpleDateFormat类对象
		// SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日") ;
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
		// 注意 :simpleDateFormat在解析文本格式的时候,里面的模式(规则)一定要和文本格式的模式一致,否则就出现PareseException
		Date dd = sdf2.parse(strDate);
		System.out.println("dd:" + dd);// dd:Mon Jun 25 00:00:00 CST 2018
	}
}

需求:

键盘录入你的出生年月日,算一下你来到这个世界多少天?
 分析:
     1)创建键盘录入对象,录入一个数据出生年月日 
     2)1990-xx-xx
     3)将文本格式的数据解析成日期对象 
     4)getTime() ;获取出生日期所对应的时间毫秒值 
     5)获取当前系统的时间毫秒值
     6) (5)-(4) = long time 

     7)换算

代码示例

public class DateTest {

	public static void main(String[] args) throws ParseException {
		/*
		 * //创建键盘录入对象
		 * 
		 * 
		 * try { //捕获异常(IO流异常类说到)
		 * 
		 * } catch (ParseException e) { e.printStackTrace(); //将代码出现的原因以及多少行会打印在控制台上 }
		 */

		Scanner sc = new Scanner(System.in);

		// 录入数据
		System.out.println("请输入您的出生年月日:");
		String str = sc.nextLine(); // yyyy-MM-dd

		// 创建SimpleDateFormat对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(str);// 解析为Date日期格式

		// 获取出生年月所对应的系统时间
		long oldTimee = date.getTime();// date为出生年月所对应的日期,date.getTime()获取的是出生年月所对应的时间

		// 获取当前系统所对应的时间毫秒值
		long newTime = System.currentTimeMillis();

		long time = newTime - oldTime;

		long day = time / 1000 / 60 / 60 / 24;// 进行单位换算
		System.out.println("您来到世间已经有:" + day + "天");
	}
}

!!!

这是Date和Stirng文本格式进行相互转换的工具类

package org.westos.d_date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.sun.org.apache.xpath.internal.operations.String;

/**
 * 这是Date和Stirng文本格式进行相互转换的工具类
 * 
 * @author Administrator
 * @version v1.0
 */
public class DateUtil {

	// 无参构造私有化
	private DateUtil() {

	}

	/**
	 * 这是一个将Date的日期格式转换成日期的文本格式
	 * 
	 * @param format
	 *            模式
	 * @param d
	 *            需要被格式化的Date格式
	 * @return 返回的就是日期的文本格式
	 */
	public static String dateToString(String format, Date d) {
		/*
		 * SimpleDateFormat sdf = new SimpleDateFormat(format) ; String s =
		 * sdf.format(d) ; return s ;
		 */

		return new SimpleDateFormat(format).format(d);// 调用匿名对象new SimpleDateFormat(format),再用匿名对象去掉用format()方法,
		// 将Date转化为(格式化为)日期的文本格式

	}

	/**
	 * 这一个将字符串文本日期格式转换Date的日期格式的功能
	 * 
	 * @param format
	 *            模式
	 * @param s
	 *            需要被解析的日期文本格式
	 * @return 返回的就Date日期格式
	 * @throws ParseException
	 *             解析如果出问题了,就会有这个异常
	 */
	public static Date stringToDate(String format, String s) throws ParseException {

		return new SimpleDateFormat(format).parse(s);// 调用匿名对象new SimpleDateFormat(format),再用匿名对象去掉用parse()方法,将日期的文本格式
		// 转化为(解析为)Date的日期格式
	}
}
package org.westos.d_date;

import java.text.ParseException;
import java.util.Date;

/**
 * 
 * 测试转换功能
 */
public class DateUtilTest {

	public static void main(String[] args) throws ParseException {

		Date d = new Date();

		// Date--->String
		String s1 = DateUtil.dateToString("yyyy-MM-dd", d);
		System.out.println("s1:" + s1);

		String s2 = DateUtil.dateToString("yyyy年MM月dd日 hh:mm:ss", d);// 第一个参数为日期的格式
		System.out.println(s2);

		System.out.println("----------------------");
		// String--->Date
		String str = "2018年10月10日";
		Date dd = DateUtil.stringToDate("yyyy年MM月dd日", str); // 第二个参数为String类型,stringToDate()方法的返回值为Date类型的
		System.out.println(dd);

	}
}

Math类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。  

 常用的方法:

  public static int abs(int a):绝对值

                public static double ceil(double a):向上取整

  public static double floor(double a):向下取整

  public static int max(int a,int b):求最大值

  public static int min(int a,int b):求最小值

  public static double pow(double a,double b):a的b次幂

  public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0

  public static int round(float a):四舍五入

  public static double sqrt(double a):一个数的正平方根

JDK5的特性:静态导入(导入方法的级别)

代码示例

public class MathDemo {
		
	public static void main(String[] args) {
		
//		public static int abs(int a):绝对值
		System.out.println(Math.abs(-10));
		System.out.println(Math.abs(10));
		
		//public static double ceil(double a):向上取整
		System.out.println(Math.ceil(12.34));
		
		//public static double floor(double a):向下取整
		System.out.println(Math.floor(12.34));
		
		//public static int max(int a,int b):求最大值
		System.out.println(Math.max(10, 20));
		//方法中嵌套方法
		
		//方法递归(方法本身调用方法的这种现象)
		System.out.println(Math.max(Math.max(10, 20), 20));
		
		//public static double pow(double a,double b):a的b次幂
		System.out.println(Math.pow(2.0, 3.0));
		
		
		//public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
		System.out.println(Math.random());
		
		//public static int round(float a):四射五入
		System.out.println(Math.round(12.56));
		
//		public static double sqrt(double a):一个数的正平方根
		System.out.println(Math.sqrt(4));
		
		System.out.println("---------------------------------------");
		
		//面试题:有两个变量,让他们的值进行互换 (考官想问的是:你能否指定位^的特点)
		int a = 10 ;
		int b = 20 ;
		
		//实际开发中:中间变量的方式进行互换
		
		//位^的特点:一个数据被另一个数据位^两次,其值是它本身
		/*System.out.println(a^b^b);
		System.out.println(a^b^a);*/
		
		System.out.println("a:"+a+",b:"+b);
		
		//=号左边: a ,b,a
		//=右边: a^b
		a = a ^ b ; 
		b = a ^ b ;//b = a^b ^ b
		a = a ^ b ; 
		
		System.out.println("a:"+a+",b:"+b);
		
	}
	
}	

Random:是一个可以获取随机数的类

 public Random():无参构造方法

 public Random(long seed) :指定long类型的数据进行构造随机数类的对象 

 public int nextInt():获取随机数,它的范围是在int类型的范围之内

 public int nextInt(int n):获取随机数,它的范围是在[0,n)之间

代码示例

public class RandomDemo {
	
	public static void main(String[] args) {
		
		//创建Random类对象
		Random r = new Random() ;
		
		for(int x = 0 ; x < 10 ; x ++) {
			int n = r.nextInt(5) ;
			System.out.println(n);
		}
		
		
	}
}

正则表达式

需求:键盘录入一个qq号码,需要校验QQ号码
要求: 1)5~15的数字组成
  2)不能以0开头
 分析:
  1)键盘录入一个QQ号码
  2)写一个校验的功能  ,返回值是boolean
  3)在里面进行判断
 邮箱校验非常复杂的校验
 引入正则表达式

代码示例

package org.westos;

import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);

		// 接收数据
		System.out.println("请输入一个QQ号码:");
		String QQ = sc.nextLine();

		// 调用校验的功能
		boolean flag = checkQQ(QQ);
		System.out.println(flag);
	}

	public static boolean checkQQ(String qq) {
		// 假设 :返回值是true
		boolean flag = true;
		// 进行判断
		// 1) 5-15的
		if (qq.length() >= 5 && qq.length() <= 15) {
			// 符合了长度之后,并且不能以0开头
			if (!qq.startsWith("0")) {

				// 符合了之后,但是数字
				// 将字符串转换成字符数组
				char[] chs = qq.toCharArray();
				// 遍历出来
				for (int x = 0; x < chs.length; x++) {
					// 获取到每一个字符
					char ch = chs[x];
					// 在for循环来判断是否是数字:Character 有一个方法:isDigit()
					if (!Character.isDigit(ch)) {// 不是数字
						flag = false;
						break;
					}
				}
			} else {// 以"0"开头
				flag = false;
			}
		} else {// 长度不符合
			flag = false;
		}
		return flag;
	}
}

使用正则表达式进行改进

package org.westos;

import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		// 接收数据
		System.out.println("请输入一个QQ号码:");
		String QQ = sc.nextLine();

		boolean flag = checkQQ(QQ);
		System.out.println(flag);
		// 定义正则规则
		/*
		 * String regex= "[1-9][0-9] {4,14}" ; //public static boolean matches(String
		 * regex) : //检验我们的字符串数据是否和正则规则匹配,如果匹配成功则返回true boolean flag = qq.matches(regex)
		 * ; return flag ;
		 */

	}

	public static boolean checkQQ(String qq) {
		// TODO Auto-generated method stub
		return qq.matches("[1-9]\\d{4,14}");
	}
}

正本表达式语法

字符

x x字符
\\ 反斜线字符
\t 制表符 
\n 换行符
\r 回车符 


字符类:
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 

预定义字符类:
. 任何字符 如果本身就是. \. qq.com 写正则表达式: \\.) 
\d 数字:[0-9] 写正则表达式 : \\d
\w 单词字符:[a-zA-Z_0-9]:大小写字母,数字字符 写正则表达式: \\w
边界匹配器:
^ 行的开头 
$ 行的结尾 
\b 单词边界尾 (helloword?haha:world)

Greedy 数量词(重点)
X? X,零次
一次  
X* X,零次或多次 
X+ X,一次或多次 
X{n} X字符恰好出现n次
X{n,} X字符至少出现n次

X{n,m} X字符至少出现n次,但不超过m次

需求

自己校验:手机号码 定义规则: 136.... 13689257284 13688886666 ....

代码示例

public class RegexDemo3 {

	public static void main(String[] args) {

		// 创建键盘录入对象

		Scanner sc = new Scanner(System.in);

		// 接收数据
		System.out.println("请输入一个手机号码:");
		String phone = sc.nextLine();

		// 定义正则规则
		String regex = "1[36]\\d{9}";

		boolean flag = phone.matches(regex);
		System.out.println(flag);
	}
}
public String replaceAll(String regex,String replacement)
  使用给定的 replacement替换此字符串中所有符合正则表达式的子字符串。 
package org.westos;

import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {

		// 定义一个字符串
		String s = "hello12345World781323244454JavaEE";
		System.out.println(s);
		// 需求:要将数字字符被替换成*
		String regex = "\\d+";// X+ 一次或多次

		// 定义替换的字符串
		String ss = "*";

		String result = s.replaceAll(regex, ss);
		System.out.println("result:" + result);
	}
}

键盘录入邮箱,校验邮箱 邮箱: qq邮箱 126邮箱 163邮箱 新浪微博邮箱 企业邮箱 919081924@qq.com

 例如:zhangsan@163.com 

         xibukaiyuan@westos.com.cn

代码示例

public class RegexTest {

	public static void main(String[] args) {

		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);

		// 接收数据
		System.out.println("请输入一个邮箱:");
		String email = sc.nextLine();

		// 定义正则规则
		// String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]+){1,4}" ;
		String regex = "\\w+@\\w{2,6}(\\.\\w+){1,4}";
		boolean flag = email.matches(regex);
		System.out.println("flag:" + flag);

	}
}

 public String[] split(String regex) :字符串的分割功能

  按照指定的格式进行分割,分割后返回的是一个字符串数组

 需求:

  QQ搜索好友 / 百合网/世纪佳缘
 

  18-24  女

代码示例

public class RegexTest2 {
	
	public static void main(String[] args) {
		
		//给定义一个字符串
		String str = "18-24" ;
		
		//利用分割功能
		String[] strArray = str.split("-") ;//分割str,将分割后的内容存入字符串数组strArray中
		
		//要将String[]数组的字符串数据转换成int类型的数据:
		int start = Integer.parseInt(strArray[0]) ;
		int end  = Integer.parseInt(strArray[1]) ;
		
		//键盘录入一个年龄
		Scanner sc = new Scanner(System.in) ;
		
		//接收
		System.out.println("请输入搜索的年龄:");
		int age =sc.nextInt() ;
		if(age >=start && age<=end) {
			System.out.println("是我们要找的人...");
		}else {
			System.out.println("不是我们要找的...");
		}
		
	}
}

 关于分割功能的用法

代码示例

package org.westos;

import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {

		String s1 = "aa,bb,cc";

		String[] str = s1.split(",");
		for (int x = 0; x < str.length; x++) {
			System.out.println(str[x]);
		}

		System.out.println("----------------------------");

		String s2 = "aa.bb.cc";
		String[] str2 = s2.split("\\.");
		for (int x = 0; x < str2.length; x++) {
			System.out.println(str2[x]);
		}

		System.out.println("----------------------------");

		String s3 = "aabb                                      cc";
		String[] str3 = s3.split(" *");
		for (int x = 0; x < str3.length; x++) {
			System.out.println(str3[x]);
		}
		System.out.println("----------------------------");

		// 硬盘上的路径的形式
		String s4 = "E:\\JavaSE\\Code\\day11";
		String[] str4 = s4.split("\\\\");
		for (int x = 0; x < str4.length; x++) {
			System.out.println(str4[x]);
		}

	}
}
需求:我有如下一个字符串:"91 27 46 38 50"
   请写代码实现最终输出结果是:"27 38 46 50 91" 
   
  分析:
    1)定义这样一个字符串
    2)将字符串进行分割,返回字符串数组
    3)将字符串数组变成int类型的数组
   4)将int类型数组中的元素拼成字符串类型
    5)输出即可

 代码示例

package org.westos;

import java.util.Arrays;
import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {

		// 定义一个字符串:
		String s = "91 27 46 38 50";

		// 将字符串进行分割,返回一个字符串数组
		String[] strArray = s.split(" ");

		// 将字符串数组变成int类型数组
		int[] arr = new int[strArray.length];

		// 遍历arr数组
		for (int x = 0; x < arr.length; x++) {
			arr[x] = Integer.parseInt(strArray[x]);
		}

		// 排序:直接用Arrays工具类
		Arrays.sort(arr);

		// 创建一个字符串缓冲区:StringBuilder 用来存储数组中的元素,在数组元素之间追加空格
		StringBuilder sb = new StringBuilder();
		// 遍历int类型数组
		for (int x = 0; x < arr.length; x++) {
			sb.append(arr[x]).append(" ");
		}

		// 还需将StringBulider转换字符串
		String result = sb.toString().trim(); // trim()用来消除两边的空格
		System.out.println("result:" + result);
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值