日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

String tirm()方法去不掉的空格

發布時間:2023/12/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);

依賴:SysClipboardUtil.getSysClipboardText();
運行結果:

去除無意義空白行后: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()方法去不掉的空格的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。