------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
正则表达式:
专门用于操作字符串
特点:用于一些特定的符号来表示一些代码操作,这样就简化了书写
好处:可以简化书写
弊端:阅读性差
具体功能:
1.匹配:matches方法
定义字符个数和规则 reg = [字符范围][字符范围](前一个[]的个数范围)
例 String reg = [ab][a-z][0-9]{1-3} \d 数字
表示3~5长度的字符串第一个字符(a或b)第二个(a~z)第三~五个字符(0~9)
boolean b=str.matches(reg) 判断str字符串是否满足规则reg
2.切割:split 方法
定义字符个数和规则 reg = ","(表示按照,切割) ; reg = " +"(按照多个空格切割)
注意:多个时在后面加+; .表示任意字符,不能将其定义为切割标识。 需要用时需对其进行转译 reg="\\."; \为转译 \.为.在正则中的写法
\\的转译写法为 \\\\;叠词切割 双叠词reg = "(.)\\1" (.)表示任意单字符的组
每个组产生都有编号 \1表示第一个组 \1表示与前一个字符相同,定义为字符串时加转译符
3.替换:replaceAll(String reg , String replacrstr)
4.取出
定义规则,封装规则为Pattern对象,关联字符获取匹配器,用匹配器查找,用匹配器获取找到的对象
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
import java.util.regex.*; class RegexDemo { public static void main(String[] args) { System.out.println("确认qq号:"); checkQQ1(); System.out.println("演示正则取出:"); getDemo(); System.out.println("演示正则替换:"); replaceDemo(); System.out.println("演示正则切割:"); splitDemo(); } /* 需求,对QQ号码进行校验 要求:5~15位,0不能开头,只能是数字。 */ //取出 public static void getDemo() { String str = "ming tian jiu yao fang jia le ,da jia"; String reg = "\\b[a-z]{3}\\b"; // \b 单词边界 定义取出规则为3个字母的字符串,其前后为单词边界 //将规则封装成对象 Pattern p = Pattern.compile(reg); //让正则对象和要作用的字符关联,获取匹配器 Matcher m = p.matcher(str); //System.out.println(m.matcher()) while (m.find()) //boolean b = m.find(); { System.out.println(m.group()); } } //替换 public static void replaceDemo() { String str = "aabbccdd00112233"; String reg = "(.)\\1+";//定义替换规则为将叠词变为单词 String str1 = str.replaceAll(reg,"$1");//将XXXX-->X,$1表示获取第一组 System.out.println(str1); } //切割正则写法 public static void splitDemo() { String str = "111,222,333"; String reg = ",";//定义切割规则 String []arr = str.split(reg);//调用切割函数 for (String s : arr ) { System.out.println(s); } } //常规写法 public static void checkQQ1() //确定输入字符串是否满足QQ号规则 { String qq = "1251111111111111aa6"; //定义一个字符串 int len = qq.length(); //确定其长度 if (!qq.startsWith("0")) //判断其是否是有0开头 { char[] arr = qq.toCharArray(); //将字符串变为字符数组 if (!(arr.length>=5&&arr.length<=15))//判断其长度是否是5~15 { System.out.println("QQ长度错误"); return; } for (int x = 0;x<arr.length ;x++ )//遍历确定其是否每一位都是数字 { if(!(arr[x]>='0'&&arr[x]<='9')) { System.out.println("QQ只能是数字"); return; } } System.out.println("QQ:"+qq); } else System.out.println("不可以0开头"); } }
运行结果:
System类:
类中的方法和属性都是静态的。
out:标准输出
in:标准输入
描述一些系统信息
常用方法:
获取系统属性信息:Properties getProperties();
import java.util.*; import java.text.*; class SystemDemo { public static void main(String[] args) { Properties prop = System.getProperties(); //因为Properties是Hashtable的子类,也是Map集合中的一个子类对象。 //那么可通过map的方法取出该集合的元素。 //该集合中存储的都是字符串,,欸有泛型定义 //如何在系统中自定义一些特有信息? System.setProperty("mykey","myvalue"); //获取指定属性信息。 String value1 = System.getProperty("os.name"); System.out.println("value1="+value1); /* jm启动时,动态加载一些属性信息? java 启动代码: java -D自定义键=自定义属性信息 类名 例:java -Dmyset=myvalue2 SystemDemo */ String myset =System.getProperty("myset"); System.out.println("myset="+myset); for (Object obj: prop.keySet()) { String value2 = (String)prop.get(obj); System.out.println(obj+":"+value2); } } }
Runtime类:
该类并没有提供构造函数,说明不能new对象,该类中的方法均为静态的。
常用方法:
exec("执行程序路径") 执行程序
class RuntimeDemo { public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); Process p = r.exec("C:\\Program Files (x86)\\Battle.net\\Battle.net Launcher.exe"); //p.destroy(); //杀掉该进程 } }
Date类:
导入的是java.text包。
Calendar
用于提取日期中的具体信息。
class DateDemo { public static void main(String[] args) { Date d =new Date(); System.out.println(d); //设置日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); String time = sdf.format(d);//利用SimpleDateFormat格式化日期格式。 System.out.println("time = "+time); Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR)+"年"+c.get(Calendar.MOUTH)+"月"); } }
Math类
public static int abs(int a):取a的绝对值;
public static double ceil(double a):向上取整;
public static double floor(double a):向下取整;
public static int max(int a,int b) :取a和b的最大值
public static double pow(double a,double b):返回第一个参数的第二个参数次幂的值。
public static double random():获取一个double类型的随机数。该值>=0 并且 < 1.0
public static int round(float a):四舍五入取整(参数为double的自学)
public static double sqrt(double a):返回正确舍入的 double 值的正平方根
class MathDemo { public static void main(String[] args) { double d1 = Math.floor(16.34);//floor方法 返回小于指定数据的最大整数。 double d2 = Math.ceil(16.34);//ceil方法 返回大于指定数据的最小整数。 double d3 = Math.round(12.54);//round方法 四舍五入 double d4 = Math.pow(2,3);//pow方法 前面数据的后面数据的幂次方 int d5 = (int) (Math.random()*10+1);//random方法 生成一个大于等于0.0而且小于1.0的伪随机double值。 //Random r = new Random (); //生成随机数的第二种方法。 // int d5 = r.nextInt(10)+1; System.out.println("d1="+d1+";d2="+d2+";d3="+d3+";d4="+d4+";d5="+d5); } }
运行结果: