1、将一个网址的中间部分截取出来,得到alipay.com
//使用正则表达式
private static void p(String s) {
Pattern p=Pattern.compile("alipay[.]com");//要取出的字段 ,正则规范
Matcher m=p.matcher(s);
while(m.find()){ //如果找到了与规范字段匹配的
System.out.println(m.group()); //打印出匹配的字段
System.out.println(m.start()); //打印出第一个匹配的位置
}
}
按照字符串的数字将字符串拆分
public class Regex{
public static void main(String[] args){
String str = "A1B22C333D4444E55555F";
String pat = "\\d+";
Pattern p = Pattern.compile(pat);
String s[] = p.split(str);//根据数字拆分 取出字符串中的非数字字符
for(int x=0;x<s.length;x++){
System.out.print(s[x]+"\t");
}
}}
2、编程序将一个字符串反转
public class StringReverse {
public static void main(String[] args) {
// 原始字符串
String s = "A quick brown fox jumps over the lazy dog.";
System.out.println("原始的字符串:" + s);
System.out.print("反转后字符串:");
for (int i = s.length(); i > 0; i--) {
System.out.print(s.charAt(i - 1));
}
// 也可以转换成数组后再反转,不过有点多此一举
char[] data = s.toCharArray();
System.out.println();
System.out.print("反转后字符串:");
for (int i = data.length; i > 0; i--) {
System.out.print(data[i - 1]);
}
}
}
public class StringReverse {
public static void main(String[] args) {
// 原始字符串
String s = "A quick brown fox jumps over the lazy dog.";
System.out.println("原始的字符串:" + s);
System.out.print("反转后字符串:");
for (int i = s.length(); i > 0; i--) {
System.out.print(s.charAt(i - 1));
}
// 也可以转换成数组后再反转,不过有点多此一举
char[] data = s.toCharArray();
System.out.println();
System.out.print("反转后字符串:");
for (int i = data.length; i > 0; i--) {
System.out.print(data[i - 1]);
}
}
}
运行结果:
1、原始的字符串:A quick brown fox jumps over the lazy dog.
2、反转后字符串:.god yzal eht revo spmuj xof nworb kciuq A
3、反转后字符串:.god yzal eht revo spmuj xof nworb kciuq A
以上两种方式虽然常用,但却不是最简单的方式,更简单的是使用现有的方法:
Java代码
public class StringReverse {
public static void main(String[] args) {
// 原始字符串
String s = "A quick brown fox jumps over the lazy dog.";
System.out.println("原始的字符串:" + s);
System.out.print("反转后字符串:");
StringBuffer buff = new StringBuffer(s);
// java.lang.StringBuffer类的reverse()方法可以将字符串反转
System.out.println(buff.reverse().toString());
}
}
运行结果:
1、原始的字符串:A quick brown fox jumps over the lazy dog.
2、反转后字符串:.god yzal eht revo spmuj xof nworb kciuq A
3、jsp中的forward和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
区别
类别
|
概念
|
共享数据
|
应用
|
Redirect
|
URL重新定向:可以是任意的URL
|
不能共享request里面的数据
|
一般用于用户注销登录时返回主页面和跳转到其它的网站等等
|
Forward
|
页面的转发:只能是同一个Web应用程序的其他Web组件
|
转发页面和转发到的页面可以共性request里面的数据
|
一般用于用户登录的时候根据角色转发到相应的模块等等
|
4、触发器的作用是什么
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
ORACLE产生数据库触发器的语法为:
create [or replace] trigger 触发器名 触发时间 触发事件
on 表名
[for each row]
pl/sql 语句
其中:
触发器名:触发器对象的名称。由于触发器是数据库自动执行 的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:
create trigger auth_secure
before insert or update or delete file://对整表更新前触发
on auths
begin
if(to_char(sysdate,'DY')='SUN'
RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');
end if;
end
5、接口和抽象类区别
区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。
区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。
区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。
区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
如下给出两者的简单对比表格。
| 接口 | 抽象类 |
多继承 | 支持 | 不支持 |
类型限制 | 没有 | 有,只能是引用类型 |
方法实现 | 继承类型中必须给出方法实现 | 继承类中可以不给出 |
扩展性 | 比较麻烦 | 相对比较灵活 |
多层继承 | 比较麻烦,需要借助虚函数 | 比较灵活 |