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、接口和抽象類區別
區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於“是”的關係;而接口是定義行爲規範,因此對於實現接口的子類來說,相對於接口來說,是“行爲需要按照接口來完成”。
區別二,抽象類在定義類型方法的時候,可以給出方法的實現部分,也可以不給出;而對於接口來說,其中所定義的方法都不能給出實現部分。
區別三,繼承類對於兩者所涉及方法的實現是不同的。繼承類對於抽象類所定義的抽象方法,可以不用重寫,也就是說,可以延用抽象類的方法;而對於接口類所定義的方法或者屬性來說,在繼承類中必須要給出相應的方法和屬性實現。
區別四,在抽象類中,新增一個方法的話,繼承類中可以不用作任何處理;而對於接口來說,則需要修改繼承類,提供新定義的方法。
如下給出兩者的簡單對比表格。
|
接口 |
抽象類 |
多繼承 |
支持 |
不支持 |
類型限制 |
沒有 |
有,只能是引用類型 |
方法實現 |
繼承類型中必須給出方法實現 |
繼承類中可以不給出 |
擴展性 |
比較麻煩 |
相對比較靈活 |
多層繼承 |
比較麻煩,需要藉助虛函數 |
比較靈活 |