Java-正則表達式

什么是正則表達式?

正則表達式(Regular?Expression)就是用某種模式去匹配一類字符串的公式。如你要在一篇文章中查找第一個字是“李”最后一個字是“建”的三個字的姓名,即“李*建”;那么“李*建”就是公式,也稱作模式(Pattern),這篇文章就是要匹配的串(或叫文本text)。再如,你要檢查輸入的一個字符串是否是126郵箱的格式,你得制定一個規則去查檢,這種規則就是正則表達式。

從入門開始

我們就從上面提到的一個例子開始:檢查一個字符串是否符合126郵箱的格式。

我們從網易的郵箱注冊頁面可以看到126郵箱的用戶名需要符合以下的格式:6~18個字符,可使用字母、數字、下劃線,需以字母開頭我們可以定義一個模式:^[a-zA-Z]\w{5,17}@126.com

這個模式可以這樣理解:

[a-zA-Z]:任何一個azAZ的英文字母

^: ? ? ?表示以什么開頭,則^[a-zA-Z]表示以字母開頭

\w: ? ? 單詞字符[a-zA-Z_0-9],即a-zA-Z0-9_中的任何一個字符

{5,17}: ?表示出現517(至少5次,不超過17),則\w{5,17}表示5~17個字符。

? ? ? ? ? ? ? ? 因為還有一個以非數字字母開頭的字符,所以^[a-zA-Z]\w{5,17}表示:“6~18個字符,可使用字母、數字、下劃線,需以字母開頭

@126.com表示符合以上規則的用戶名后跟上@126.com字符串,即組成一個郵箱地址。

^[a-zA-Z]\w{5,17}@126.com”就是我們所說的正則表達式,用Java的簡單實現如下:


[javascript]?view plain?copy
  1. String?regex?=?"^[a-zA-Z]\\w{5,17}@126\\.com";??//定義匹配的規則:正則表達式??
  2. //說明:126.com中的.需要轉義\\.??
  3. String?text?=?"ZhanSan@126fcom";????//要檢查的字符串??
  4. boolean?isMatched?=?text.matches(regex);????//判斷text是否符合規則regex??
  5. System.out.println(isMatched);??

正則表達式常用符號

上面一個示例中用到的“^”、“\w”、“{5,17}”等都是正則表達式中的常用符號,這些符號在正則表達式中都有特殊的含意。下面這個表格是Java中的正則表達式常用符號的含意(只抽取了其常用的部分進行說明,就這些部分其實可以解決關于正則表達式的絕大多數的問題了)

模式

匹配的內容(含意)

?

?

字符類

[abc]

a、b?或?c(簡單類)

[^abc]

任何字符,除了?a、b?或?c(否定)

[a-zA-Z]

a?到?z?或?A?到?Z,兩頭的字母包括在內(范圍)

[a-d[m-p]]

a?到?d?或?m?到?p:[a-dm-p](并集)

[a-z&&[def]]

d、e?或?f(交集)

[a-z&&[^bc]]

a?到?z,除了?b?和?c:[ad-z](減去)

[a-z&&[^m-p]]

a?到?z,而非?m?到?p:[a-lq-z](減去)

?

?

預定義字符類

.

任何字符(與行結束符可能匹配也可能不匹配)

\d

數字:[0-9]

\D

非數字:?[^0-9]

\s

空白字符:[?\t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

單詞字符:[a-zA-Z_0-9]

\W

非單詞字符:[^\w]

?

?

邊界匹配器

^

行的開頭

$

行的結尾

\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?次

?

?

邏輯運算符

XY

X?后跟?Y

X|Y

X?或?Y

(X)

X,作為捕獲組

參考文檔:Class?Pattern

?

這些常用的符號在各種編程語言的正則表達式中含意基本相同(因為正則表達式的思想是相同的),所以都可以用來參數。但不同的語言可能會有一些細小的差別,如果要針對各種編程語言,想有更精確和權威的說明,可參考其官方文檔:

C++(VS2013編譯器)http://msdn.microsoft.com/zh-cn/library/bb982727.aspx#grammarsummary

Java:??????????????http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

JavaScript:?????????http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

?

?


正則表達式的使用

下面從常見的需求出發講述C++JavaJavaScript中正則表達式的使用

C++中的正則表達式

C++中正則表達式主要有三種實現方式:C語言的實現方式(C?regex)C++標準庫的實現(C++?regex)Boost庫的實現(boost?regex)C?regex的方式是一種面向過程的編程方式,使用起來不太方便;C++?regex的方式因為是標準庫的一部分,所以可以直接使用(好像Linux平臺下不支持),但C++?regex非常難用,語法要求比較嚴格,而且好多默認的選項和我們正常的想法不一樣;Boost是一個開源的第三方庫,這個庫非常優秀,廣泛應用于C++的項目開發中,boost?regex非常靈活好用,C++開發時是大家推崇的一種方式。

關于boost?regex的用法,在后繼的文章將會進一步介紹,現在以C++?regex的方式列舉一個使用樣例。

1.驗證ip地址

[cpp]?view plain?copy
  1. #include?<regex>??
  2. #include?<iostream>??
  3. #include?<string>??
  4. ??
  5. bool?IsIpV4Address(const?std::string&?strIp)??
  6. {??
  7. ????//驗證IP地址的模式,這里"\."中的"\"是轉義字符,表示這是一個.??
  8. ????const?std::regex?pattern("(\\d{1,3}){1}\.(\\d{1,3}){1}\.(\\d{1,3}){1}\.(\\d{1,3}){1}");??
  9. ????//匹配驗證??
  10. ????return?std::regex_match(strIp,?pattern);??
  11. }??
  12. ??
  13. int?main()??
  14. {??
  15. ????std::string?strIp1?=?"134.34.34.4";//192.168.1.1??
  16. ????std::string?strIp2?=?"192.168.255";??
  17. ??
  18. ????std::cout?<<?strIp1?<<?"?:?"?<<?(IsIpV4Address(strIp1)???"valid"?:?"invalid")?<<?std::endl;??
  19. ????std::cout?<<?strIp2?<<?"?:?"?<<?(IsIpV4Address(strIp2)???"valid"?:?"invalid")?<<?std::endl;??
  20. ????return?0;??
  21. }??

?

Java中的正則表達式

1.驗證一個字符串是否為URL

[java]?view plain?copy
  1. public?static?boolean?isUrl(String?text)?{??
  2. ????String?regex?=?"^http://([\\w-]+.)+[\\w-]+(/[\\w-./?%&=#]*)?$";??
  3. ????return?text.matches(regex);??
  4. }??

2.判斷一個文本中有多少個URL,并將所有的URL加上超鏈接.

如以下文本:

C++(VS2013編譯器)http://msdn.microsoft.com/zh-cn/library/bb982727.aspx#grammarsummary

Java:??????????????http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

JavaScript:?????????http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

添加鏈接后變成:

C++(VS2013編譯器)<a?href=http://msdn.microsoft.com/zh-cn/library/bb982727.aspx#grammarsummary

>http://msdn.microsoft.com/zh-cn/library/bb982727.aspx#grammarsummary</a>

Java:??????????????<a?href=http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

>http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html</a>

JavaScript:?????????<a?href=http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

>http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp</a>

?

[java]?view plain?copy
  1. /**?
  2. ?*?給一個字符串添加鏈接?
  3. ?*?@param?text?要添加鏈接的字符串?
  4. ?*?@param?url?鏈接的URL?
  5. ?*?@return?添加鏈接后的字符串?
  6. ?*/??
  7. public?static?String?AddHref(String?text,?String?url)?{??
  8. ????return??"<a?href=\""?+?url?+??"\">"?+?text?+?"</a>";??
  9. }??
  10. ??
  11. /**?
  12. ?*?查找文本中的URL字符串,并將其添加鏈接?
  13. ?*?@param?text?需要查找的文本?
  14. ?*?@return?添加鏈接后的文本?
  15. ?*/??
  16. public?static?String?AddLinkToText(String?text)?{??
  17. ????Pattern?pattern?=?Pattern.compile("http://([\\w-]+.)+[\\w-]+(/[\\w-./?%&=#]*)?");??
  18. ????Matcher?matcher?=?pattern.matcher(text);??
  19. ????StringBuffer?sb?=?new?StringBuffer();???????????//定義一個字符緩沖區,用于保存新的文本??
  20. ????while?(matcher.find())?{??
  21. ????????String?matchedSubStr?=?matcher.group();?????//提取出查找到的子串??
  22. ????????matcher.appendReplacement(sb,?AddHref(matchedSubStr,?matchedSubStr));???//將找到的子串添加鏈接后塞到字符緩沖區內??
  23. ????}??
  24. ????matcher.appendTail(sb);??
  25. ????return?sb.toString();??
  26. }?????

?

JavaScript中的正則表達式

JavaScript中的正則表達式是通過RegExp對象實現的。RegExp對象的創建有三種方式:

精簡方式:

/pattern/attributes

new方式:

new?RegExp(pattern,?attributes);

函數調用的方式:

RegExp(pattern,?attributes);

?

????參數pattern可以是一個模式串,也可以是一個RegExp對象,如果pattern本身就是RegExp的對象,則attributes參數將不起作用(新創建的對象的必發與pattern對象相同。),需要省略,如果不省略會拋TypeError?異常。

????參數attributes有三種屬性"g"、"i"?和?"m",分別用于指定全局匹配、區分大小寫的匹配和多行匹配。

?

RegExp主要有三個方法:

compile

編譯正則表達式,可用于改變和重新編譯正則表達式。

exec

檢索字符串中指定的值。返回找到的值,并確定其位置。

test

檢索字符串中是否有指定的值。返回?true?或?false

?

?

1.驗證字符串是否為數字

[javascript]?view plain?copy
  1. <script?type="text/javascript">??
  2. ????function?isNumber(text)?{??
  3. ????????var?pattern?=?new?RegExp("^\\d*$");??
  4. ????????return?pattern.test(text);??
  5. ????}??
  6. ???????
  7. ????var?value1?=?"1234";??
  8. ????document.write(value1?+?"?is?Numed:"?+?isNumber(value1));??
  9. </script>??

2.郵箱格式:

[javascript]?view plain?copy
  1. <script?type="text/javascript">??
  2. ????function?isEmail(text)?{??
  3. ????????var?reg?=?/^([\w-.])+@([\w-])+((\.[\w-]{2,3}){1,2})$/;??
  4. ????????return?reg.test(text);??
  5. ????}??
  6. ???
  7. ????var?value2?=?"Zhang.San@163.com";??
  8. ????document.write(value2?+?"?is?Email:"?+?isEmail(value2));??
  9. </script>??


?

3.將一個文本中的所有郵箱地址和在文本中的位置打印到頁面

[javascript]?view plain?copy
  1. <script?type="text/javascript">??
  2. ????function?PrintEmail(text)?{??
  3. ????//匹配的模式??
  4. ????var?reg?=?RegExp("([\\w-.])+@([\\w-])+((\.[\\w-]{2,3}){1,2})",?"g");??
  5. ????var?result;?//保存結果??
  6. ???
  7. ????while?((result?=?reg.exec(text))?!=?null)??{??
  8. ????????document.write(result[0]?+?"<br/>"?+?result.index);??
  9. ????????document.write("<br/><br/>");??
  10. ????}??
  11. ????}??
  12. ???
  13. ????var?text?=?"張三?Zhang.San@163.com;?李四?Li_si@126.com;王五?WangWu@gmail.com.cn"?;??
  14. ????PrintEmail(text);??
  15. </script>??
?



應用場景

數據驗證:

例如,可以檢查輸入的字符串,看其是否為電話號碼格式,或是否為郵箱格式。?這在網頁的表單輸入中經常用到。

查找子串:

可以查找文檔內(或一個字符串內)符合指定模式的子串。

替換文本:

可以使用正則表達式來識別文檔中的特定內容,完全刪除該部分內容或者用其他字符串來替換它。

使用工具:

WordNotePad++EditPlus等文字編輯器中的查找功能都支持正則表達式,用正則表達式你就可以實現更加多樣化的查找。還有像VSCodeBlockEclipseIntellij?Idea等開發工具的IDE的查找替換功能也都支持正則表達式,用它你可以修改變量名,調整代碼格式,統計代碼行數等。

?


?

常用正則表達式總結

常用的正則表達式已經有很多人做了總結了,在網上能夠找到非常多,我就沒有再寫的必要了。下面貼出我覺得還不錯的一個總結。

此部分內容為轉載,來自:http://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html

?

一、校驗數字的表達式

 1 數字:^[0-9]*$
 2 n位的數字:^\d{n}$
 3 至少n位的數字:^\d{n,}$
 4 m-n位的數字:^\d{m,n}$
 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$
 6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
 7 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$
 8 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$
 9 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
10 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整數:^[1-9]\d*$^([1-9][0-9]*){1,3}$^\+?[1-9][0-9]*$
12 非零的負整數:^\-[1-9][]0-9"*$  ^-[1-9]\d*$
13 非負整數:^\d+$^[1-9]\d*|0$
14 非正整數:^-[1-9]\d*|0$^((-\d+)|(0+))$
15 非負浮點數:^\d+(\.\d+)?$^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮點數:^(-?\d+)(\.\d+)?$^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

二、校驗字符的表達式

 1 漢字:^[\u4e00-\u9fa5]{0,}$
 2 英文和數字:^[A-Za-z0-9]+$^[A-Za-z0-9]{4,40}$
 3 長度為3-20的所有字符:^.{3,20}$
 4 由26個英文字母組成的字符串:^[A-Za-z]+$
 5 由26個大寫英文字母組成的字符串:^[A-Z]+$
 6 由26個小寫英文字母組成的字符串:^[a-z]+$
 7 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
 8 由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$
 9 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以輸入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
12 禁止輸入含有~的字符:[^~\x22]+

三、特殊需求表達式

 1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
 2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
 3 InternetURL:[a-zA-z]+://[^\s]*  ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
 4 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
 5 電話號碼("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX""XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 
 6 國內電話號碼(0511-4405222021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
 7 身份證號(15位、18位數字):^\d{15}|\d{18}$
 8 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
 9 帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$
11 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$  
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$ 
15 錢的輸入格式:
16    1.有四種錢的表示形式我們可以接受:"10000.00""10,000.00", 和沒有 """10000""10,000"^[1-9][0-9]*$ 
17    2.這表示任意一個不以0開頭的數字,但是,這也意味著一個字符"0"不通過,所以我們采用下面的形式:^(0|[1-9][0-9]*)$ 
18    3.一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:^(0|-?[1-9][0-9]*)$ 
19    4.這表示一個0或者一個可能為負的開頭不為0的數字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧.下面我們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$ 
20    5.必須說明的是,小數點后面至少應該有1位數,所以"10."是不通過的,但是 "10""10.2" 是通過的:^[0-9]+(.[0-9]{2})?$ 
21    6.這樣我們規定小數點后面必須有兩位,如果你認為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$ 
22    7.這樣就允許用戶只寫一位小數.下面我們該考慮數字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 
23    8.1到3個數字,后面跟著任意個 逗號+3個數字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 
24    備注:這就是最終結果了,別忘了"+"可以用"*"替代如果你覺得空字符串也可以接受的話(奇怪,為什么?)最后,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這里
25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
26 中文字符的正則表達式:[\u4e00-\u9fa5]
27 雙字節字符:[^\x00-\xff]    (包括漢字在內,可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1))
28 空白行的正則表達式:\n\s*\r (可以用來刪除空白行) 29 HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對于復雜的嵌套標記依舊無能為力)
30 首尾空白字符的正則表達式:^\s*|\s*$或(^\s*)|(\s*$) (可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式) 31 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始) 32 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數字) 33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址時有用)
34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))??? (由@飛龍三少 提供,感謝共享)

?


注意:

正則表達式是一個非常強大而又非常常用的一個編程技術,我以上這片文章也只是拋磚引玉,講述了其中最常用的一部分。因為其內容實在太龐大,如果要詳細描述,每一種編程語言的正則表達式都可以單獨成一本書。



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274017.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274017.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274017.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tab標簽的另一種寫法

<div class"good"><ul><li><span>歌曲精選</span></li><li class"other"><span>MV精選</span></li></ul><div class"music_good"><p><span>丁當</span…

java 中 if與while的區別

if&#xff1a;就是一個判斷的&#xff0c;如果滿足后面的條件就繼續運行if語句里面的東西的&#xff0c;要是不滿足就跳出來&#xff0c;執行else語句或執行下面的語句的 。while&#xff1a;就是循環語句的&#xff0c;當滿足while里面的條件時&#xff0c;就會執行里面的循環…

install yael on the ubuntu 12.04

1. bits/predefs.h no such file or directory ??? sudo apt-get install gcc-multilib 2. sudo gedit /etc/profile PATH$PATH:/usr/local/MATLAB/R2012a/bin source /etc/profile 3.ubuntu 切換gcc 版本 1&#xff09;sudo apt-get install gcc-4.4 g-4.4 g-4.4-multi…

Java 線程多線程編程3---線程同步之生產者與消費者問題

生產者與消費者問題&#xff1a; 第一步&#xff1a;把架子搭起來 package com.zhj.www;public class ProceduerConsumer {public static void main(String[] args) {} }//饅頭實體 class wotou{int id;wotou(int id) {this.id id;}public String toString() {return "wo…

windows 服務實例

參考來源:http://blog.csdn.net/morewindows/article/details/6858216 參考來源: http://hi.baidu.com/tfantasy/item/aefa43d66b470a2b38f6f76c 剩下的都是我自己整理的。 在VS2012中新建一個Windows 服務的項目。然后在解決方案目錄下找到Services1.cs&#xff0c;切換到代碼…

Java 線程多線程編程2---線程同步

來模擬一個死鎖&#xff08;互相等待&#xff09;&#xff1a; TestDeadLock.java package com.zhj.www;public class TestDeadLock implements Runnable {public int flag 1;static Object o1 new Object();static Object o2 new Object();public void run() {System.out.p…

Java網絡編程1---基礎

TCP/IP:事實上的標準 自己編的應用程序&#xff1a;應用層 TCP/UDP層 IP層 物理層 數據封裝&#xff1a;第五層只與第四層打交道。 數據拆封《TCP/IP詳解》網絡底層 IP巨大的貢獻&#xff1a;提供了獨一無二的IP地址。 內網IP&#xff1a;虛假的 子網掩碼&#xff1a;255.255.2…

Java網絡編程2---Socket-TCP編程

Sockct:插座Socket是關于TCP的。 端口號&#xff1a;兩個字節->65536個端口號&#xff0c;一個應用程序占多個端口號&#xff1b; 但是假設一個應用程序占一個端口號&#xff1b;一臺電腦會有65535個應用程序。 自己編寫程序要占用端口號1024以上后的。 80端口&#xff1a;網…

winform綁定多張圖片

開發winform程序的時候經常設計到要顯示多張圖片的問題&#xff0c;其解決思路一般是先遍歷文件夾中的所有圖片&#xff0c;然后再把這些圖片添加到ImageList控件中&#xff0c;最后再綁定顯示出來。這里我們介紹兩種綁定的方法&#xff1a; &#xff08;一&#xff09;動態生成…

Java網絡編程3---Socket-UDP編程

栗子&#xff1a;TestUDPServer.java 服務器端&#xff1a; package com.zhj.www;import java.net.DatagramPacket; import java.net.DatagramSocket;public class TestUDPServer {public static void main(String[] args)throws Exception {byte buf[] new byte[1024];Datagr…

iOS 6 自動布局入門

http://www.raywenderlich.com/zh-hans/22873/ios-6-自動布局-入門&#xff0d;1轉載于:https://www.cnblogs.com/ihojin/p/auto-layout.html

Java GUI 基礎知識

這部分主要包含AWT、組件和容器、布局管理器Component&#xff1a;所有可以和用戶交互的圖形元素&#xff0c;他的子類有&#xff1a;輸入框… Java.awt及其子包 Container&#xff1a;容器&#xff0c;容納其他各種各樣的Component的元素。 Panel&#xff1a;可以容納其他元素…

UVA11300

初步解題原理:代數運算單元素極值 代數運算: xi表示第i個給i-1的數量&#xff0c;正負表示給或得 c(a1a2a3....an)/n a1-x1x2c -->x2x1-a1c a2-x2x3c -->x3x1-a1-a22c a3-x3x4c -->x4x1-a1-a2-a33c ...... an-xnx1c -->xnx1-a1-a2-a3....-a(n-1)(n-1)c ansmax{|x1|…

Java GUI 基礎知識2 監聽機制

TestActionEvent.java沒有調用方法&#xff0c;但是有反應。反應自己要編寫程序有反應。 事件模型&#xff1a;一定要有某些反應。 寫程序&#xff0c;監聽的操作是自動發生的&#xff0c;一直監聽。鉤子函數&#xff0c;&#xff08;回調函數&#xff09; 怎么讓它自動執行&am…

求字符串的最長回文字串 O(n)

昨天參加了某公司的校園招聘的筆試題&#xff0c;做得慘不忍睹&#xff0c;其中就有這么一道算法設計題&#xff1a;求一個字符串的最長回文字串。我在ACM校隊選拔賽上遇到過這道題&#xff0c;當時用的后綴數組AC的&#xff0c;但是模板忘了沒寫出代碼來。 回頭我把這道題目再…

數據結構 二、向量(接口與實現and可擴容向量)

ADT操作實例&#xff1a;Disordered&#xff1a;顯示出3對逆序緊鄰對。Vector模板類初始有效空間為0&#xff1b;基于復制的構造描述區間&#xff1a;左閉右開 為什么*2&#xff1f;有限時間內不必要為擴容而打斷。 2、可擴充向量左移一位&#xff1a;加一倍

數據庫:mysql 獲取剛插入行id[轉]

我們在寫數據庫程序的時候,經常會需要獲取某個表中的最大序號數, 一般情況下獲取剛插入的數據的id&#xff0c;使用select max(id) from table 是可以的。但在多線程情況下&#xff0c;就不行了。 下面介紹三種方法 (1) getGeneratedKeys()方法: 程序片斷: Connection conn ; …

svn由于連接方在一段時間后沒有正確答復或連接的主機沒有反應連接嘗試失敗...

解決方法&#xff0c;關掉防火墻&#xff0c; service iptables status 查看iptables狀態 service iptables restart iptables服務重啟 service iptables stop iptables服務禁用 轉載于:https://www.cnblogs.com/jiqing9006/p/3347441.html

Android 服務(Service)

一、服務的解釋 服務&#xff08;Service&#xff09;是Android中實現后臺運行的解決方案&#xff0c;它適合那些去執行不需要和用戶交互而且還要求長期運行的任務。服務的運行不依賴任何的與任何用戶界面&#xff0c;即使程序被切換到后臺&#xff0c;或者用戶打開了另外一個應…

CenOS 配置C/C++語言

1.下載eclipseCDT組合包。 2.電腦上安裝GCC&#xff0c; G 3.在eclipse上創建一個C project 4. Eclipse CDT功能很強大&#xff0c;安裝完雖然可以編譯運行c程序&#xff0c;但有個問題&#xff0c;就是找不到c標準庫的頭文件&#xff0c;無法打開諸如之類的文件&#xff0c;編…