成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何去除字符串中的 "\n" ?

開發 前端
我最近負責的工作是設計一個 SQL 解析引擎。簡單來說,就是將一個 SQL 表達式字符串,解析為一顆對象樹,從而執行查詢等一系列操作。

[[387047]]

本文轉載自微信公眾號「程序員魚皮」,作者 魚皮。轉載本文請聯系程序員魚皮公眾號。  

 大家好,我是魚皮,今天分享一個小知識。

我最近負責的工作是設計一個 SQL 解析引擎。簡單來說,就是將一個 SQL 表達式字符串,解析為一顆對象樹,從而執行查詢等一系列操作。

SQL 解析原理

在最開始,我就遇到了一個很頭疼的問題,用戶編寫的 SQL 語句可能非常不標準!

理想的 SQL 語句,縮進很規范,沒有多余的字符:

  1. select * from user

而現實往往是這樣的:

  1. select * \n 
  2. rom   user

上述語句不僅縮進、換行很隨意,還多了很多無意義的字符串,比如 "\n" !

因此,想要設計一個通用性強的 SQL 解析引擎,首先要對字符串進行 預處理,將輸入的 SQL 語句標準化。比如去除回車、換行、冗余的空格和特殊字符等。

那問題來了,如何去除字符串中的所有 "\n" 呢?注意,這里的 "\n" 并不是換行符,而是由字符 '\' 和字符 'n' 組成的字符串!

  1. # 轉換前 
  2. select * \n  
  3. from user
  4.  
  5. # 轉換后 
  6. select * from user

首先我想到了兩種思路:

  • 用循環語句順序掃描每個字符,通過當前字符和下一個字符判斷是否為 "\n",再移除。
  • 直接用 Java 語言提供的 replaceAll 方法,傳入一個正則表達式,直接將完整字符串中所有匹配正則的子串替換為空串。

我這里選擇后者,直接用現成的方法會比較方便,而且借助強大的正則表達式,可以同時替換掉多個冗余字符。

Java 正則表達式定義:

  1. /* 
  2.  * 全部替換 
  3.  * regex 正則表達式 
  4.  * replacement 要替換成的新串 
  5.  */ 
  6. public String replaceAll(String regex, String replacement) { 
  7.   return Pattern.compile(regex).matcher(this).replaceAll(replacement); 

剛開始我想的太簡單了,直接編寫出如下代碼:

  1. str.replaceAll("\n"""); 

結果,并不能順利地替換掉字符串中的 "\n",僅僅是把換行符去掉了!

用單個反斜杠的結果

原因很簡單,在 Java 字符常量中,反斜杠(\)是一個特殊的字符,被稱為 轉義字符,它的作用是用來轉義后面一個字符,本身不具有實際意義!

因此,不能用下面這種方式直接輸出反斜杠:

報錯

如果想要單獨輸出一個反斜杠,需要再加上一個反斜杠轉義:

無報錯

同理,想要輸出一個 "\n" 字符串,代碼要這么寫:

  1. System.out.println("\\n"

那不妨試試這個正則表達式:

  1. str.replaceAll("\\n"""); 

結果出乎意料,竟然和只用一個反斜杠時的效果一樣!僅僅是移除了換行符。

用兩個反斜杠的效果

其實,正確的答案應該是使用 四個反斜杠,因為反斜杠在 Java 和正則表達式中都是轉義字符!

其中,第一個斜杠是轉義符,第二個斜杠是斜杠本身,第三個斜杠又是轉義符,第四個斜杠是斜杠本身。

在 Java 中,輸出 "\n" 字符串需要兩個反斜杠和一個 'n',在 Java 的正則表達式中,要給這兩個反斜杠分別再分配一個反斜杠進行轉義,才能生效。

總而言之,記住一句話:Java 正則表達式中,匹配一個反斜杠要用四個反斜杠!

 

責任編輯:武曉燕 來源: 程序員魚皮
相關推薦

2010-06-28 15:18:51

SQL Server

2022-11-25 07:53:26

bash腳本字符串

2021-01-09 23:11:33

SQL數據庫字母

2022-12-15 16:23:32

JavaScrip字符串開發

2017-12-11 13:50:17

LinuxBash子字符串

2010-09-06 17:30:46

SQL函數

2021-09-10 08:18:31

Go語言字符串

2010-07-13 09:20:38

SQL Server

2009-02-24 15:39:27

字符串比較函數函數

2011-06-08 15:45:41

字符串JAVA

2011-07-11 16:00:22

字符串拼接

2021-09-07 09:23:07

C++字符串算法

2020-09-03 10:13:49

JavaScript字符串pad

2010-08-12 10:26:12

FlexXML

2010-09-09 11:48:00

SQL函數字符串

2010-03-16 17:14:19

Python字符串

2024-12-05 10:29:13

Rust字符串類型

2023-10-08 08:37:28

SQL字符串數據

2010-11-26 11:08:20

MySQL字符串

2021-05-31 07:57:00

拼接字符串Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 暖暖成人免费视频 | 国产精品一区二区久久 | 国产高清一二三区 | 国产视频三级 | 欧美成人h版在线观看 | 在线色| 国产亚洲精品精品国产亚洲综合 | 国产欧美在线一区 | 亚洲欧洲精品一区 | 一级片在线观看 | 99久久久久久久久 | 日韩毛片免费看 | 亚洲欧美一区二区三区视频 | 9191成人精品久久 | www精品美女久久久tv | www.99热| 国产日韩欧美一区二区在线播放 | 91精品国产乱码久久久久久久 | 久久爱一区| 国产美女一区二区 | 精品免费国产视频 | 欧美日韩国产中文 | 免费看av大片 | 欧美成人一区二区三区 | 国产一区二区三区 | 狠狠天天| 一区二区三区不卡视频 | 天天躁日日躁aaaa视频 | 色爱综合网 | 亚洲精品电影网在线观看 | 国产精品久久久久影院色老大 | 国产精品成人一区二区 | 欧美成人精品激情在线观看 | 亚洲不卡在线视频 | 免费黄色a视频 | 欧美亚洲在线 | 中文字幕一区在线观看视频 | 黄视频网址| 欧美精品在线一区二区三区 | a国产一区二区免费入口 | 久久久久久国产精品免费免费男同 |