API(Application Programming Interface)应用程序编程接口
是对java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明.
API—>语言中提供的类,接口
API–>对类,接口功能的说明文档
基本类型:结构简单 int short long byte char boolean double float
每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类.
包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。
基本数据类型 | 对应的类 |
---|---|
byte | Byte |
int | Integer |
long | Long |
shor | Short |
double | Double |
float | Float |
char | Character |
boolean | Boolean |
对于包装类来说,这些类的用途主要包含两种:
作为和基本数据类型对应的类类型存在。
包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
以Integer为例
public static void main(String[] args) {
int num = 10;//只表示一个具体的值
System.out.println(num);
//构造方法
Integer num1 = new Integer(10);//把10包装在Integer这个类的对象中
Integer num2 = new Integer("10");//把String类型转为int,只能传入String类型的数字,否则会报错
//Integer类包装一个对象中的原始类型int的值。 类型为Integer的对象包含一个单一字段,其类型为int 。
//Integer类提供了方法来对int类型进行操作
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);//获取最大值和最小值
System.out.println(Integer.BYTES);
System.out.println(Integer.SIZE);
System.out.println(Integer.toBinaryString(4));//二进制
System.out.println(Integer.toHexString(100));//十六进制
System.out.println(Integer.toOctalString(78));//八进制
System.out.println(num1.compareTo(num2));//比较,-1(前面的num1小)0(相等)1(前面的num1大)
System.out.println(Integer.max(10,50));
System.out.println(num1.equals(num2));//true,equals()比较的是两个对象的值
System.out.println(num1==num2);//false,==比较的是两个对象在内存中的地址
Integer num3 = new Integer(10);
int num4 = num3.intValue();//取出对象中包含的具体的值
long num5 = num3.longValue();//转换为long类型
int num6 = Integer.parseInt("11");//把字符串类型转为int型
Integer num7 = Integer.valueOf(12);//把基本类型的10封装成引用类型Integer
Integer num8 = Integer.valueOf(12);
//把数值转为字符串类型
System.out.println(num8.toString());
System.out.println(Integer.toString(10));
自动装箱和自动拆箱
自动装箱:把基本类型转为引用类型,自动调用valueOf()
自动拆箱:引用类型转为基本类型,自动调用intValue()方法
/*
自动装箱:把基本类型转为引用类型
*/
int n = 10;
Integer n1 = n;//自动调用valueOf()
/*
自动拆箱:引用类型转为基本类型
*/
int n2 = n1;//自动调用intValue()方法
public static void main(String[] args) {
Integer num0 = new Integer(10);
Integer num1 = new Integer(10);
System.out.println(num0.equals(num1));//true
System.out.println(num0 == num1);//false
Integer num2 = Integer.valueOf(10);
Integer num3 = Integer.valueOf(10);
System.out.println(num2.equals(num3));//true
System.out.println(num2 == num3);//true
/*
使用装箱(valueOf)在创建对象时,值如果在-128---127之间,如果多个值相同,指向的是内存中同一个地址
使用new+构造方法()方式,不管值是否在此区间相同,都会创建新的对象
*/
Integer num4 = Integer.valueOf(128);
Integer num5 = Integer.valueOf(128);
System.out.println(num4 == num5);//false
}
Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
public class Person { ... }
/*等价于:
public class Person extends Object {
...
}*/
Object类中定义有public String toString()方法,其返回值是 String 类型,描述当前对象的有关信息。
在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),
将自动调用该对象类的 toString()方法
可以根据需要在用户自定义类型中重写toString()方法。
public class ObjectDemo {
public static void main(String[] args) {
Person p = new Person("admin",18);
/*
将对象输出时,就会调用toString()
当类中没有定义toString()时,会默认调用父类(Object)中的toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
本地方法,java语言不实现,调用操作系统实现
public native int hashCode();
Object类中toString()将对象地址转为16进制的字符串输出,
在类中重写toString()
*/
System.out.println(p);//day08.Person@1540e19d
//重写后:Person{姓名='admin'年龄=18}
}
}
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"姓名='" + name + '\'' +
"年龄=" + age +
'}';
}
}
public boolean equals(Object obj)方法
提供定义对象是否“相等”的逻辑。
Object 的 equals 方法 定义为:x.equals ( y ) ,当 x 和 y是同一个对象的引用时返回 true 否则返回 false
JDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法, x.equals (y) ,
x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回 true 否则返回 false。
public class ObjectDemo2 {
public static void main(String[] args) {
Person p1 = new Person("admin",18);
Person p2 = new Person("admin",18);
//Object中equal方法比较的是创建的对象在内存中的地址是否相等,等同于==
//其他类都重写了equal方法,比较的是内容是否相等
System.out.println(p1.equals(p2));//false,重写后输出false,比较的是对象中包含的内容
System.out.println(p1==p2);//false
}
}
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
字符串是由多个字符组成的一串数据(字符序列)的字符串常量(值不能改变),java中所有字符串都是String类的实例.
String s = “abc”;
有两种创建形式:
第一种:
String s = “abc”;
先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找有没有"abc", 如果没有则在常量池中
添加”abc”, s引用变量指向常量池中的”abc”,如果常量池中有,则直接指向该地址即可,不用重新创建.
String s = "abc";
String s1 = "abc";
System.out.println(s.equals(s1));//true
System.out.println(s==s1);//true
第二种:
使用new+构造方法()
一概在堆中创建新对象,值存储在堆内存的对象中。
String s = new String(“abc”);
/*
只要是new出来的对象,在内存中一定是一个独一无二的对象空间
*/
String s2 = new String("abc");
String s3 = new String("abc");
System.out.println(s2.equals(s3));//true
System.out.println(s2==s3);//false
字符串特点
public class StringDemo2 {
public static void main(String[] args) {
/*
字符串值是常量,不能改变,一旦改变是在内存中重新创建了一个对象
字符串底层是数组存储(单个字符存储),final修饰,值不能改变吧
*/
String s = "abc";
s += "def";
s += "aaa";
System.out.println(s);
}
}
构造方法
/*
String类中常用方法
构造方法:
String();
String(String s);
*/
//创建一个String对象,值为""
String s = new String();
判断功能
//判断功能
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));//true
System.out.println(s1.equalsIgnoreCase("aBc"));//true,不区分大小写比较内容1是否相等
System.out.println(s1.contains("ab"));//true,包含
System.out.println(s1.isEmpty());//false,是否为空(" ")
System.out.println(s1.startsWith("a"));//true,以 开头
System.out.println(s1.endsWith("c"));//true,以 结尾
System.out.println("a".compareTo("b"));//-1,a对应97,b对应98,返回-1,a与c则返回-2,比较大小,用于排序
获取功能
//获取功能
System.out.println(s1.length());//获取字符串长度
System.out.println(s.charAt(2));//把字符串当作数组,返回2对应位置的字符c(abc---012)
System.out.println(s.indexOf("c"));//找到对应的位置2,只能找到第一个c对应的位置
System.out.println(s.indexOf("c",3));//给指定位置开始找字符首次出现的位置
System.out.println(s.lastIndexOf("c"));//从后往前找字符首次出现的位置
System.out.println(s.lastIndexOf("c",10));//从指定位置开始从后往前找字符首次出现的位置
//若字符不存在则返回-1
System.out.println(s.substring(2));//从指定位置截取字符串到结束,返回一个新的字符串,原字符串不变
System.out.println(s.substring(2,6));//区间截取,包含开始的字符,不包含结束的那个字符
替换功能
//替换功能
String s = new String(" abcde ");
System.out.println(s.replace('c','C'));//原来的字符串不会变,替换后会返回一个新的字符串
System.out.println(s.replace("ab","AB"));
System.out.println(s.replaceAll("ab","AB"));//把所有的ab替换为AB,返回新的字符串
System.out.println(s.replaceFirst("ab","ABC"));//用ABC替换ab中的第一个字符a,返回新的字符串
System.out.println(s.trim());//去掉前后的空格,不能消除中间的空格
转换功能
/*
构造方法
public String(byte[] bytes)
public String(char[] value)
*/
//转换功能
//byte[] getBytes()
// char[] toCharArray()
String s = "abc";
byte [] b = s.getBytes();//编码:字符转为字节
System.out.println(Arrays.toString(b));//[97, 98, 99]
String s1 = new String(b);//解码:字节转为字符
System.out.println(s1);//abc
String s2 = "中文";
byte [] b2 = s2.getBytes("utf-8");
System.out.println(Arrays.toString(b2));//[-28, -72, -83, -26, -106, -121]
String s3 = new String(b2,"utf-8");
System.out.println(s3);//中文
String s4 = new String(b2,3,3,"utf-8");
System.out.println(s4);//文
String s5 = "abc";
char [] c = s5.toCharArray();//转为char数组
System.out.println(Arrays.toString(c));//[a, b, c]
String s6 = new String(c);
String s7 = String.valueOf(c);//char转为String
String s8 = "abcdEFG";
System.out.println(s8.toLowerCase());//全部小写abcdefg
System.out.println(s8.toUpperCase());//全部大写ABCDEFG
//contact()效率高于"+"
String s9 = s8.concat("xxxx");//拼接,返回新的字符串
System.out.println(s9);//abcdEFGxxxx
String s10 = s8+"xxxx";//效率最低的字符串拼接
String s11 = "ab:cd:ef:g";//分割
String [] arr = s11.split(":");
System.out.println(Arrays.toString(arr));//[ab, cd, ef, g]
线程安全的可变字符序列
只能通过new+构造方法()创建
//无参的构造方法,默认底层创建一个长度为16的char数组 char[] value
StringBuffer s = new StringBuffer();
StringBuffer s1 = new StringBuffer(10);//创建一个容量为10的数组
StringBuffer s2 = new StringBuffer("abc");//在abc的基础上容量加16
s2.append("def");
s2.append("hijk");
System.out.println(s2);//直接添加在原来的数组里,不创建新的对象
/*
大量的字符串拼接,使用StringBuffer,不会创建新的对象
*/
s2.insert(1,"xxx");//从指定位置插入字符串
s2.delete(0,5);//删除指定区间,包含0,不包含5
s2.deleteCharAt(3);//删除指定位置的字符,从0开始数
s2.replace(0,3,"B");//把指定区间的字符替换,包含0不3
s2.reverse();//逆序输出
s2.substring(3);
s2.substring(0,3);//截取
/*
除截取返回值类型为String,其余返回值均为StringBuffer
*/
StringBuffer类StringBuilder类String类区别
public static void main(String[] args) {
/*
StringBuilder 适用于单线程下在字符缓冲区进行大量操作,内容可变
StringBuffer 适用于多线程在字符缓冲区下进行大量操作线程安全,内容可变
String 字符常量,适用于少量字符串的操作,内容不可变
*/
StringBuilder s = new StringBuilder();
s.append("aaa");
}
java.util.Arrays;
用于操作数组工具类,里面定义了常见操作数组的静态方法。
equals()方法
比较两个非同一数组是否相等,而数组本身的equals判断另一个数组是否它本身。
声明:public static boolean equals(type[]a,type[]a2)
参数的类型可以是原生数据类型和引用类型的任意一种类型。
返回:如果两个相等,则返回true,否则返回false
public static void main(String[] args) {
int [] a = {1,2,3,4,5};
int [] b = {1,2,3,4,5};
System.out.println(Arrays.equals(a,b));//比较两个数组包含元素是否一致
sort排序
作用于数组的所有元素public static void sort(type[] a)
作用于数组指定范围内的元素public static void sort(type[] a, int fromIndex(包括), int toIndex(不包括))将指定的类型(除boolean以外的任意原生数据类型)数组所有元素(或指定范围内的元素)按数字升序进行排序。object型数组,根据元素的自然顺序,对指定对象数组进行升序排序。(fromIndex==toIndex,则排序范围为空)
自定义对象排序
自定义类实现Comparable接口
public static void main(String[] args) {
int [] a = {2,3,1,42,6,8};
Arrays.sort(a);//排序
Arrays.sort(a,0,3);//指定区间排序,包含0不包含5
System.out.println(Arrays.toString(a));
//对引用类型数组排序,
Student s1 = new Student("bim",70,50,120);
Student s2 = new Student("cim",80,60,140);
Student s3 = new Student("aim",60,50,110);
Student [] students = new Student[3];
students[0] = s1;
students[1] = s2;
students[2] = s3;
Arrays.sort(students);//对学生数组排序
System.out.println(Arrays.toString(students));
//排序接口,要重写CompareTo()方法
public class Student<CompareTo> implements Comparable<Student>{
String name;
int bs;
int sj;
int sum;
/*
用于排序比较的方法,在sort()方法中调用
*/
@Override
public int compareTo(Student o) {
return this.sum-o.sum;//自定义排序规则,用哪个属性比较,用哪个属性排序
//return this.name.compareTo(o.name);
}
toString() 方法
声明:public static String toString(type[] a)
描述:返回指定数组内容的字符串表示形式。
基本数组,字符串表示形式由数组的元素列表组成,括在[],相邻元素用“, ”(逗号加空格)分隔。
System.out.println(Arrays.toString(a));
泛型
/*
泛型:参数化类型
类型不确定,传参时可以将类型作为参数传入,只能传入引用类型,如果不传,默认是Object
*/
public class TypeDemo<T,M> {
T p;
M x;
public String test(String a){
return null;
}
public static void main(String[] args) {
//TypeDemo t = new TypeDemo<>();
//t.p;
TypeDemo<Integer,String> t,x = new TypeDemo<>();
}
}
二分查找
声明:
public static int binarySearch(type[] a, type key)
public static int binarySearch(long[] a,int fromIndex,int toIndex,long key)
描述:使用二分搜索算法搜索指定的type型数组,以获得指定的值。
参数:a - 要搜索的数组。
key - 要搜索的值。
fromIndex - 要排序的第一个元素的索引(包括)。
toIndex -
要排序的最后一个元素的索引(不包括)。
type -byte、double、float、object、long、int、short、char
如果key在数组中,则返回搜索值的索引;否则返回-1或者”-“(插入点)
public static void main(String[] args) {
int [] a = {5,2,3,1,1};
//二分折半,前提是排序后的数组
Arrays.sort(a);
int index = Arrays.binarySearch(a,1);//折半,要找的值小于中间值在前一部分找,大于中间值在后半部分找,找到返回0,没找到返回1
int index1 = Arrays.binarySearch(a,0,3,1);//指定区间查找
System.out.println(index);
}
数组复制
int [] a = {1,2,3,4,5};
int [] b = Arrays.copyOf(a,10);//会创建一个新的数组,复制原来的数组,后面值为初始化的默认值
java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。
abs 绝对值
sqrt 平方根
pow(double a, double b) a的b次幂
max(double a, double b)
min(double a, double b)
random() 返回 0.0 到 1.0 的随机数
long round(double a) double型的数据a转换为long型(四舍五入)
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.abs(-98));//绝对值
System.out.println(Math.sqrt(9));
System.out.println(Math.pow(2,3));//2的3次方
System.out.println(2<<2);
System.out.println(Math.ceil(11.2));//12,向上取整
System.out.println(Math.floor(11.6));//11向下取整
System.out.println(Math.round(11.2));//四舍五入取整
System.out.println(Math.random());//返回0-1之间的随机数,可能为0但不会为1
}
Random类
此类用于产生随机数
构造方法
public Random()
成员方法
public int nextInt()
public int nextInt(int n)
import java.util.Arrays;
import java.util.Random;
public static void main(String[] args) {
Random r = new Random();
System.out.println(r.nextBoolean());//true或false随机返回
System.out.println(r.nextInt());//在int取值范围内随机返回
System.out.println(r.nextInt(10));//在0-10之间随机返回,不包含10
byte [] b = new byte[5];
r.nextBytes(b);//括号里面要传byte数组,向里面装入数组.length个byte随机数
System.out.println(Arrays.toString(b));
}
System类
System 类包含一些有用的类字段和方法。它不能被实例化。
成员方法
public static void exit(int status)
public static long currentTimeMillis()
public static void main(String[] args) {
//public final static PritStream out = null
//println()是PritStream中的方法
System.out.println();
System.out.println(System.getenv());//环境
System.out.println(System.getenv("Path"));//环境里面path的值
System.out.println(System.getProperties());//属性
System.out.println(System.getProperty("jav.runtime.version"));
// System.exit(0);//关闭程序
System.out.println("aaaaaa");//关闭后这句不执行
long s = System.currentTimeMillis();//1970 1.1 0.0.0--到今天的毫秒差,在1970年1月1日UTC之间的当前时间和午夜之间的差异,以毫秒为单位。//1608206306537
for (int i = 0; i < 100000; i++) {
System.out.println(i);
}
System.out.println(System.currentTimeMillis()-s);
// int a[] = {1,2,3,4,5};
// int []b = Arrays.copyOf(a,10);
int a[] = {1,2,3,4,5};
int b[] = new int[10];
System.arraycopy(a,0,b,0,a.length);
System.out.println(Arrays.toString(b));
Date类
使用Date类代表当前系统时间
Date d = new Date();
Date d = new Date(long d);
//构造方法
Date date = new Date();//获得当前运行时间
System.out.println(date);
Date date0 = new Date(1608206306537L);
// date.setTime(1608206306537L);//括号里面要传long类型的时间
Date date1 = new Date();
System.out.println(date1.getYear()+1900);//过期方法不建议使用@Deprecate
System.out.println(date1.getMonth()+1);
System.out.println(date1.getDate());
System.out.println(date1.getDay());//0 星期天 1 2 3 4 5 6
System.out.println(date1.getHours());
System.out.println(date1.getTime());//==System.currentTimeMillis()
Calendar类
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需
要使用getInstance方法创建即可。
Calendar c1 = Calendar.getInstance();
c1.get(Calendar. YEAR);
//Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,
// 创建对象的过程对程序员来说是透明的,
// 只需要使用getInstance方法创建即可。
//Calendar rightNow = Calendar.getInstance();
Calendar rightNow = new GregorianCalendar();
rightNow.set(2022,5,1);
System.out.println(rightNow.get(Calendar.DAY_OF_YEAR));//日历字段
System.out.println(rightNow.get(Calendar.YEAR));
System.out.println(rightNow.get(Calendar.MONTH)+1);
System.out.println(rightNow.getTime());
System.out.println(rightNow.getTimeInMillis());
SimpleDateFormat 日期格式化类
构造方法
SimpleDateFormat(格式); // yyyy-MM-dd
日期转字符串
Date now=new Date();
myFmt.format(now);
字符串转日期
myFmt.parse(“2018-02-10”);
字符串日期格式与 指定格式必须一致
例如:String s = “2018-03-15”;
new SimpleDateFormat(“yyyy-MM-dd”)
public static void main(String[] args) {
//1.日期对象转为指定格式的字符串
Date date = new Date();
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月ddd日 HH:mm:ss E", Locale.FRANCE);
String str = sdf.format(date);
System.out.println(str);
//2.字符串转为日期对象
String birthday = "1999-12-17";
SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY-MM-dd");
try {
Date date1 = sdf1.parse(birthday);
System.out.println(date1);
} catch (ParseException e) {
e.printStackTrace();
}
}
在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性。
我们都知道 Integer 是 Int 的包装类,int 的最大值为 2^31-1。若希望描述更大的整数数据时,使用Integer 数据类
型就无法实现了,所以Java中提供了BigInteger 类。
BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算
中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。
BigInteger类位于java.math包中
构造方法
BigInteger(String val) /BigInteger(byte[] val) …
基本运算方法
add(),subtract(),multiply(),divide()
BigInteger b1 = new BigInteger("1608206306537456789023456789");
BigInteger b2 = new BigInteger("1608206306537456789023456789");
BigInteger b3 = b1.add(b2);//新创建一个对象
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b1.subtract(b2));//减,可以得到负数
System.out.println(b1.multiply(b2));//乘
System.out.println(b1.divide(b2));//除
在计算机中不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。
根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近
于那个值.
double a = 1.0-0.9;
double b = 0.8-0.7;
System.out.println(a==b); // 结果?
但是,在项目中,我们不可能让这种情况出现,特别是金融项目,因为涉及金额的计算都必须十分精确,你想想,
如果你的支付宝账户余额显示193.99999999999998,那是一种怎么样的体验?
Java在java.math包中提供的API类BigDecimal
构造方法
BigDecimal(String val)
基本运算方法
add(),subtract(),multiply(),divide()
System.out.println(12-11.9==0.1);//false
System.out.println(12-11.9);//0.09999999999999964
BigDecimal b1 = new BigDecimal("11.9");
BigDecimal b2 = new BigDecimal("11.8");
System.out.println(b1.subtract(b2));//0.1
BigDecimal b3 = new BigDecimal("10");
BigDecimal b4 = new BigDecimal("3");
//System.out.println(b3.divide(b4));//会报错,出现无限循环小数时就会报错
//如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException 。
System.out.println(b3.divide(b4,4,BigDecimal.ROUND_CEILING));//4表示保留4位小数,ROUND_CEILING表示向上进一位
System.out.println(b3.divide(b4,5,BigDecimal.ROUND_FLOOR));//ROUND_FLOOR表示直接剪掉后面的小数
/*
正则表达式 regular-expression 简称:regex
是一种模式匹配语法,由许多特定字符组成,每种字符匹配一种规则
使用这些特定字符匹配某一个字符串,判断字符串是否满足规则需求
从各终端向程序中输入数据时,需要对象输入的数据格式进行验证(长度,格式(手机格式,邮箱格式,qq格式,网址,数字....))
*/
public static void main(String[] args) {
String s = "wsY hdh@# %$";
if(s.length()>10||s.length()<3){
// for (int i = 0; i < s.toCharArray().length; i++) {
// if(i==0){
// s.toCharArray()[0]!=1;
// }
// }
boolean res;
res = s.matches("\\d");//\\d-是否都是数字,只能匹配一个数字,最终的返回值是布尔类型
res = s.matches("\\d?");//?-数量词,一次或一次也没有,控制数量。
res = s.matches("\\d*");//*-零次或多次
res = s.matches("\\d+");//+-一次或多次
res = s.matches("\\d{11}");//{n}-固定n次
res = s.matches("\\d{3,}");//至少3次,上不封顶
res = s.matches("\\d{3,6}");//3-6位,包含3和6
res = s.matches("\\D");//\\D-非数字
res = s.matches("[0-9]{3,6}");//[0-9]-0-9的数字,3-6位
res = s.matches("[1357]{3,6}");//只包含1357,3-6位
res = s.matches("[^1357]{3,6}");//非1357,3-6位
res = s.matches("\\w*");//\\w-单词字符,大小写字母,0-9数字
res = s.matches("[a-z]*");//小写字母
res = s.matches("[A-Za-z]*");//大小写字母
res = s.matches("[A-z]*");//大小写字母
res = s.matches("[A-z0-9]*");//大小写字母,0-9数字
System.out.println(res);//false
}
}