主頁(yè) > 知識(shí)庫(kù) > 通過(guò)Java正則表達(dá)式去掉SQL代碼中回車換行和多余空格

通過(guò)Java正則表達(dá)式去掉SQL代碼中回車換行和多余空格

熱門標(biāo)簽:惠安地圖標(biāo)注 哈爾濱公司外呼系統(tǒng)代理 上海銷售電銷機(jī)器人軟件 山東外呼系統(tǒng)聯(lián)系方式 浙江營(yíng)銷外呼系統(tǒng)有哪些 地圖標(biāo)注店鋪地圖標(biāo)注酒店 自己做的電銷機(jī)器人 遼寧秒客來(lái)電話機(jī)器人 淄博市張店區(qū)地圖標(biāo)注
復(fù)制代碼 代碼如下:

public static void main(String[] args) {
String sql = "SELECT * FROM \n" +
" `testdb`.`foo` LIMIT 0, 100";
String s = "SELECT * FROM `testdb`.`foo` LIMIT 0, 100";
String sql2 = Pattern.compile(" {2,}").matcher(s).replaceAll(" ");
String sql3 = s.replaceAll(" {2,}"," ");
String sql4 = sql.replace('\r', ' ').replace('\n', ' ').replaceAll(" {2,}"," ");;
String sql5 = sql.replace('\r', ' ').replace('\n', ' ').replaceAll(" {2,}?"," ");;
String sql6 = sql.replace('\r', ' ').replace('\n', ' ').replaceAll(" {2,}+"," ");;
System.out.println(sql2);
System.out.println(sql3);
System.out.println(sql4);
System.out.println(sql5);
System.out.println(sql6);
}

輸出結(jié)果:
復(fù)制代碼 代碼如下:

SELECT * FROM `testdb`.`foo` LIMIT 0, 100
SELECT * FROM `testdb`.`foo` LIMIT 0, 100
SELECT * FROM `testdb`.`foo` LIMIT 0, 100
SELECT * FROM `testdb`.`foo` LIMIT 0, 100
SELECT * FROM `testdb`.`foo` LIMIT 0, 100
[code]
Process finished with exit code 0
結(jié)果可以看出,有一個(gè)是沒(méi)有去掉多余空格的。

可見(jiàn)java中的正則式,同樣含義的還有多重寫法,呵呵!其實(shí)主要是不同數(shù)量詞匹配模式在作怪:

原版API文檔中寫道:

Greedy 數(shù)量詞

X? X,一次或一次也沒(méi)有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過(guò) m 次

Reluctant 數(shù)量詞

X?? X,一次或一次也沒(méi)有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超過(guò) m 次

Possessive 數(shù)量詞

X?+ X,一次或一次也沒(méi)有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超過(guò) m 次


但是,沒(méi)有對(duì)三種方式進(jìn)行更詳細(xì)的說(shuō)明,其實(shí)三種模式的區(qū)別如下:

Greedy :嘗試找到最長(zhǎng)的匹配。
Reluctant :嘗試找到最短的匹配。
Possessive :也嘗試找到最長(zhǎng)的匹配。

盡管greedy和possessive迫使一個(gè)matcher在進(jìn)行第一次匹配之前讀取整個(gè)的text,greedy常常導(dǎo)致為了找到一個(gè)match進(jìn)行多次嘗試,然而possessive讓一個(gè)matcher僅嘗試一個(gè)match一次。

下面是一個(gè)我工具中的方法:
[code]
/**
* 判斷一條SQL語(yǔ)句是否已經(jīng)是分頁(yè)的SQL
*
* @param sql 源SQL
* @return 是已經(jīng)分頁(yè)的SQL時(shí)返回ture,否則返回False;
*/
public boolean isAlreadySegmentSQL(String sql) {
return sql.replace('\r', ' ').replace('\n', ' ').replaceAll(" {2,}", " ").matches("(?i).+LIMIT [\\d+ *|\\d *, *\\d+].+");
}

還是正則功能強(qiáng)悍?。?

補(bǔ)充:
下面這個(gè)兩個(gè)注視的正則式,和第三個(gè)語(yǔ)意一樣的:
復(fù)制代碼 代碼如下:

// regList.put("(?i)bit\\([2-9]\\)\\z", "byte[]");
// regList.put("(?i)bit\\(\\d{2,}\\)\\z", "byte[]");
regList.put("(?i)bit\\((\\d{2,}|[2-9])\\)\\z", "byte[]");

本文出自 “熔 巖” 博客
您可能感興趣的文章:
  • java Split 實(shí)現(xiàn)去除一個(gè)空格和多個(gè)空格
  • Java用split分割含一個(gè)或多個(gè)空格的字符串案例
  • java去除空格、標(biāo)點(diǎn)符號(hào)的方法實(shí)例
  • java 對(duì)象參數(shù)去空格方式代碼實(shí)例
  • Java去除字符串中空格的方法詳解
  • JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個(gè)數(shù)
  • java 使用正則表達(dá)式去除前后空格

標(biāo)簽:無(wú)錫 長(zhǎng)沙 綿陽(yáng) 泰州 重慶 西安 銅川 宣城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《通過(guò)Java正則表達(dá)式去掉SQL代碼中回車換行和多余空格》,本文關(guān)鍵詞  通過(guò),Java,正則,表達(dá)式,去掉,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《通過(guò)Java正則表達(dá)式去掉SQL代碼中回車換行和多余空格》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于通過(guò)Java正則表達(dá)式去掉SQL代碼中回車換行和多余空格的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章