String tirm()方法去不掉的空格
刪除String trim()方法去不掉的空格(中文(全形)空格)
需求
- 移除掉下面程式碼中的空白行。
- 移除每行前面的多餘空白符
要處理的文字:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher (s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
移除空白行:使用正則表示式
使用String類的replaceAll()方法可以移除空白行,只要我用正則表示式匹配到這些空白行,然後把這些空白行替換為空字串就行了。
text = text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
(?m)
表示開啟多行匹配模式,^
匹配行開頭,\\s*
0個或多個空白符,$
匹配行結尾,(\\n|\\r\\n)
匹配字串中的換行符。
測試程式碼如下:
String text = SysClipboardUtil.getSysClipboardText();
System.out.println("去除無意義空白行後:");
text = text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
System.out.println(text);
去除無意義空白行後:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone" ));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
____________________________________
好的,第一個需求做到了。
移除每行前面的多餘空白符
String.trim()方法刪除不掉該空格符
現在text字串中,每一行的前面有兩個空白符:,因為這些空白符在行尾,很自然想到使用text.trim()方法取出掉該空白符,但是奇怪的是根本就去不掉。
之所以去不掉是因為這個空格不簡單啊,不是普通那種空格,這裡稱為bug空格
。
bug空格:
普通空格:
、
可以看到這個bug空格
比普通的空格的寬度要寬。不過也不是沒有辦法。
思路1:用該空格自己匹配來自己,進行替換刪除
不過既然這個bug空格可以複製貼上,那我就直接貼上到程式中,用它自己來匹配自己,這樣使用text.replaceAll("[ ]+","")
就可以把這個bug空格" "
全部替換成空白字串""
,就相當於刪除掉該字串了。
程式碼如下:
String text = SysClipboardUtil.getSysClipboardText();
//刪除文字中的空白行
text=text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
System.out.println("刪除空白行之後的文字:");
System.out.println(text);
//直接貼上這個空格到字元組中,
text=text.replaceAll("[ ]+", "");
System.out.println("_______________________________");
System.out.println("去除中文全形空格後:");
System.out.println(text);
複製需要處理的文字,然後執行上面的程式碼。執行結果如下。
刪除空白行之後的文字:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
_______________________________
去除中文全形空格後:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
可以看到用了這種傻瓜式的操作就可以完成任務了。不過還是有點心有不甘,因為不知道這個bug空格是什麼東西,下面來看看這個bug空格到底是什麼東西。
思路2:轉成Unicode碼然後查碼錶看看是什麼東西
查了一下,其實這個空格叫做中文(全形)空格
,我怎麼知道的呢。先把這個空格轉換成Unicode
字元就知道了。
程式碼如下
String chinese_full_width_space=" ";//中文全形空格
String urlEncoderUnicode = URLEncoder.encode(chinese_full_width_space,"utf-16be");//java中的字元都用utf-16be進行編碼,所以轉碼為utf-16be我們就知道了這個奇怪的字元在java裡的編碼。這樣方便後面查詢。
System.out.println(urlEncoderUnicode);
執行結果:
%30%00
%30%00
轉換成平常表示的java中的Unicode編碼就是\u3000
,然後再到網上查一下看看這個\u3000
是什麼:
嗯,原來這個bug空格叫做中文全形空格
好的,既然我們知道了這個奇怪的空格是中文全形空格,也知道對應的Unicode碼為\u3000
,java中正則表示式支援Unicode碼,所以可以使用text=text.replaceAll("\u3000+", "");
把所以的中文全形空格替換成空字元,也就是移除掉所有的中文全形空格了。
String text = SysClipboardUtil.getSysClipboardText();
//刪除文字中的空白行
text=text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
System.out.println("刪除空白行之後的文字:");
System.out.println(text);
//直接貼上這個空格到字元組中,
// text=text.replaceAll("[ ]+", "");
// 使用Unicode碼匹配中文全形空格
text=text.replaceAll("\u3000+", "");
System.out.println("_______________________________");
System.out.println("去除中文全形空格後:");
System.out.println(text);
執行結果:
刪除空白行之後的文字:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
_______________________________
去除中文全形空格後:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
啟發
遇到一個不懂的字元的時候可以先把它轉為Unicode
碼,然再查碼錶,或者網上查。
相關推薦
String tirm()方法去不掉的空格
刪除String trim()方法去不掉的空格(中文(全形)空格) 需求 移除掉下面程式碼中的空白行。 移除每行前面的多餘空白符 要處理的文字: BufferedReader in; Pattern pattern = Patt
【String】trim() 方法去不掉的空格
1.問題由來 在對word/excel 做資料匯入匯出的時候,獲取excel 的numberic 的值 ,然後將該值轉為Integer 的時候 Integer.valueOf(value),總是報錯 for input String ... debug
php不是空格的空白字元,trim去不掉,匹配也去不掉,怎麼辦
今天過濾一段文字,後面有2個空格,用trim去不掉,用preg_match也去不掉,去網上翻閱了無數的方法,終於找到了非常好的一個解決方法。該文章來源於https://my.oschina.net/fffddgx/blog/196376 ,思路是 ,首先將字元分隔開,
吐槽CSDN--想錢想瘋了--推薦文章裡面廣告博文去不掉
CSDN廣告手段高,廣告博文刪不掉! 如圖所示,我自己的部落格文章下面有個相關文章推薦,這是csdn新出的資訊流式內容呈現方式,也沒什麼太大問題。只是,你在裡面放廣告“羊毛衫,彈力褲”還夾著docker網路課程,我的天哪。docker那個還能接受,點選去是
myeclipse和eclipse一鍵取消所有斷點(取消去不掉的斷點)
找錯時我們經常打斷點,但斷點打多了一個一個取消很麻煩,也有時候eclipse出現錯誤導致斷點取消不了,所以我向大家分享一下心得,直接取消所有斷點,一下解決掉這些麻煩。 1.選擇window選單欄,選Pr
檔案刪除不了,檔案粉碎也不行,去不掉只讀屬性,F8安全模式下也刪不掉,引數不正確
RT,本人各種情況都遇到過,試過網上的很多方法,自己也總結一下。 檔案刪除不了,檔案粉碎也不行,去不掉只讀屬性,DOS下也刪不掉,F8安全模式下也刪不掉 反正啥子招兒都試了,就是刪不掉,老頑固,格式化都不行,也沒有程式佔用這個資料夾,就是刪不掉。 分析: 1.通常刪不
String類的trim()方法之不能消除的空格
在後臺數據統計清洗中,我們時常會遇到針對字串的修改的問題,其中比較常見的就是消除字串中的空格。這裡筆者要闡述的不是如何消除字串中出現的空格,而是在消除字串中遇到的問題:有些空格不能使用trim()消除掉。 這個問題出現的原因在於trim()函式只能消除半形空格,而不能消除全
真正掌握vuex的使用方法(二)現在有的小夥伴是不是在想,以後如果我要在這裏寫自己的計算屬性怎麽辦?怎麽辦?咱們可以通過對象合並的方法去實現。 通過Object.assign()合並對象:
als js文件 false 目錄 pan md5加密 擴展 對象 pre 從上篇文章當中相信大家已經對vuex有了一些大概了解了,接下來咱們結合實例來繼續敲代碼吧!切記一定要動手實操練習一遍! 接下來咱們來完成一個超級簡單的投票功能!要求很簡單,點擊“投票”按鈕,相應的票
常用Java API 熟悉 方法 從記不得到忘不掉 java1.8.61為例
熟悉jDK自帶的常用API是十分有必要的 今天 2018/8/15 先來熟悉 最常用的 版本為 jdk 1.8.0_161 首先 明確一下 Java 到底是值傳遞還是引用傳遞? https://www.zhihu.com/question/31203609 也許這個知乎話題能夠解
Python字串去空方法 Python去除多餘空格
Python去除多餘空格 今天做爬蟲時。發現結果中好多多餘的空格。然後有強迫症的我當然不會放過 " xyz ".strip() # returns "xyz" " xyz ".lstrip(
通過js禁止輸入空格(試用場景:當用字符串拼接插入dom節點時,onkeyup這些方法都不好使可用這個)
urn lob ria 所有 span returns cas code else if <span style="font-family: Arial, Helvetica, sans-serif;"><input type="password" nam
新手做店鋪淘客模式不會做,沒經驗?按照下面方法去做,輕鬆開店
網店作為資訊時代的產物,發展到現在演變出了店鋪淘客,傳統淘客已經末路,店鋪淘客冉冉升起!開好一個淘客店鋪一定要有一個好的思路,一份堅持,加上百分之一百的努力。 淘寶客是始於2009年,通過淘寶聯盟平臺,從聯盟推廣專區獲取商品連結,任何買家通過您的推廣連結進入購買
string去全形空格
#include "stdafx.h" #include <string> #include <iostream> #include <windows.h> usin
同一個dom上加單擊事件和雙擊事件的衝突解決辦法,雙擊事件方法進不去
data() { return { TimeFn:''//定義公用變數}} $(".proManage fieldset ul li").dblclick(function(){//雙擊播放專案 //雙擊事件執行的方法 this.TimeFn = ""}) $(".proManage
無延時去抖按鍵實現方法(不耗CPU)
這一靈感來源於定時器計數的方法,最後可以實現的效果跟咱們電腦鍵盤按鍵的效果一樣!我先來介紹下基本原理吧! 採用定時器中斷的方法,比如定時器終端我們設定為5ms,我們需要按鍵按下超過40ms時才算有按鍵按下,如果按鍵超過500ms時,我們就確定按鍵是連續按下的! 那麼我就需要
oracle 刪不掉歸檔日誌檔案的解決方法
oracle 11g 舊的歸檔日誌無法清理 問題描述: 使用delete expired archivelog all; delete noprompt archivelog until time 'sysdate - 7' ;命令指令碼定時執行自動刪除7天以前的歸檔日誌,發現歸檔日誌資料夾還有大量磁碟空間未
controller.java方法進不去
使用技術SSM,AngularJS問題描述啟動服務之後,開啟網頁的功能,在主頁面、controller.js、service.js都可以alert出,但是無法進入controller.java,debug也進不去controller.java中的方法,網頁F12報錯找不到pa
字串去多個空格,以及字串去特殊字元的方法
1.去空格以及多個空格public String trim() { String str = "小 米"; // 先去掉前後空格 str = str.trim(); // 去除空格前 System.out.println("pre:" + str);
印表機刪除不掉的解決方法
在印表機故障的時候,有一種狀態是總有一個文件留在印表機裡刪除不掉,使印表機程式也刪除不掉,印表機也不能正常使用。 解決方法:1, 點選 "開始" 選單裡面的 "執行", 在 "開啟" 的命令列裡面輸入: net stop spooler. 2. 點選 "確定" 後, 會出現一
微信聊天記錄刪除可以恢復嗎?下面的方法你不去試試
選擇 微信聊天 相對 ESS 會有 src 簡單 記得 提示 現在很多的使用手機的時候,都會選擇現在手機上下載一些社交軟件,這些社交軟件,對於我們來說有很多,像是微信、ins、QQ……許許多多的社交軟件,但是我們比較常用的還是微信,我們經常的在我們的微信去進行聊天,那麽我們