`
宁远天意
  • 浏览: 5522 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_正则表达式

阅读更多
[b][/b]----------- android培训java培训、java学习型技术博客、期待与您交流! ---------



正则表达式

  1:正则表达式
(1)正则表达式:就是符合一定规则的字符串。
(2)规则字符:

(3)常用功能:
a:判断功能
String -- matches()
b:切割功能
String -- split()
c:替换功能
String -- replaceAll()
d:获取功能
Pattern
Matcher
compile()
find()
group()
(4)案例:
1:校验电话号码
public class RegexDemo {
public static void main(String[] args) {
String regex = "1[35]\\d{9}";
Scanner sc =new Scanner(System.in);
System.out.println("请输入你的手机号:");
String phone = sc.nextLine();
boolean flag = phone.matches(regex);
System.out.println(flag);
}
}
2.校验邮箱
public class RegexTest {
public static void main(String[] args) {
String regex = "\\w+@\\w{2,8}(\\.\\w{2,3})+";
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的邮箱:");
String email = sc.nextLine();
boolean flag = email.matches(regex);
System.out.println(flag);
}
}
叠词的规则:
(.)\\1+
3:我要学编程
我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。
思路:
A:把点去掉
B:叠词保留一个
public class RegexTest {
public static void main(String[] args) {
String str = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";

// 替换
String result = str.replaceAll("\\.", "");
String finalResult = result.replaceAll("(.)\\1+", "$1");
System.out.println(finalResult);
}
}
4:获取文本文件中的邮箱
A:通过字符输入流读取数据。
B:把读取到的每一行数据进行查找。
C:把查找到的数据存储到集合中。
D:遍历集合。
public class RegexTest {
public static void main(String[] args) throws IOException {
// 通过字符输入流读取数据。
BufferedReader br = new BufferedReader(new FileReader("mail.txt"));
// 创建一个集合
ArrayList<String> array = new ArrayList<String>();

// 定义邮箱规则
String regex = "\\w+@\\w{2,8}(\\.\\w{2,3})+";

String line = null;
while ((line = br.readLine()) != null) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(line);
while (m.find()) {
array.add(m.group());
}
}
// 遍历集合。
for (String s : array) {
System.out.println(s);
}
}
}
2.要掌握的正则规则
(1):特殊字符
\\:反斜线
\r:回车
\n:换行
(2):字符类
[abc]:a,b或者c的任意一个。
[^abc]:除了a,b,c以外的字符。
[a-zA-Z]:包括了26个英文字母。
[0-9]:包括了0-9这个10个数字字符。

(3):预定义字符类
. 任意字符
\d 数字[0-9]
\D 非数字[^0-9]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

(4):边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界

(5):Greedy 数量词
x? 0次或1次
x* 0次或多次
x+ 1次或多次
x{n} 恰好n次
x{n,} 至少n次
x{m,n} 至少m次,但不能超过n次

反射

(1)反射:在程序运行时期,是通过class文件对象,去使用构造方法,成员变量,成员方法。
(2)获取class文件对象
1:Object类的getClass()方法
2:数据类型的静态的class属性
3:Class类forName()静态方法
推荐:开发使用第三种。
(3)反射的应用
1:通过反射获取构造方法并使用
//获取字节码文件对象
Class c = Class.forName("cn.itcast.Person");

//获取构造器对象
Constructor con = c.getDeclearedConstrator(String.class,int.class);
//通过构造器对象获取Person对象
Object obj = con.newInstance("张三",21);
2:通过反射获取成员变量并使用
//获取字节码文件对象
Class c = Class.forName("cn.itcast.Person");

//获取构造器对象
Constructor con = c.getDeclearedConstrator(String.class,int.class);

//通过构造器对象获取Person对象
Object obj = con.newInstance("张三",21);

//获取成员变量
Field field = c.getDeclaredField("name");
field.setAccessiable(true);
field.set(obj,"李四");

3:通过反射获取成员方法并使用
//获取字节码文件对象
Class c = Class.forName("cn.itcast.Person");

//获取构造器对象
Constructor con = c.getDeclearedConstrator(String.class,int.class);

//通过构造器对象获取Person对象
Object obj = con.newInstance("张三",21);

//获取所有公共方法对象,包括从父类继承的
//(获取本类所有方法的时候,不包括从父类继承的)
Method[] methods = c.getDeclaredMethods();
for(Method m : methods){
m.setAccessiable(true);
m.invoke(obj, null);
}




----------- android培训java培训、java学习型技术博客、期待与您交流! ---------
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics