Java中使用trim()無法去除空格的解決方法
問題描述
今天遇到一個比較怪異的問題,這里簡單記錄一下:
有個需求是需要去掉字符串后面的空格,我這里使用的是String.trim()
public class Demo1 {
public static void main(String[] args) {
String s1 = "空格測試 ";
System.out.println(s1.trim());
// 空格測試
}
}
到這里是不是完全沒問題,但是今天發(fā)現輸入的數據明明帶了空格,結果還是沒有去掉,沒有得到想要的結果。
原因分析:
首先,使用trim方法去掉首位空格是沒有問題的。那為什么會出現上述問題呢?
查閱資料后發(fā)現,trim方法只能去掉字符串中的ASCII值為32的空格,即半角空格
全角和半角
在輸入法中存在全角和半角字符的概念,比如說“逗號”存在“全角逗號和半角逗號”,體現在Unicode中就是兩個不同的碼位。
全角字符
全角字符占3字節(jié),ASCII值為12288,全角字符不能被trim
ASCII -160 特殊空格
該空格為不間斷空格(non-breaking space),占2個字節(jié),即前端頁面上的
,同樣也不能被trim
也就是說,trim或者replace只能去掉ASCII值為32的空格,而ASCII值為160或全角的空格是無法通過replace或者trim處理的
解決方案:
方法一:使用正則表達式
ASCII編碼是160的空格,Unicode對應是\u00A0,使用replace+UNICODE編碼\u00A0替換,全角空格(\u3000),使用replace方法+全角空格字符替換,普通空格,使用replace方法+\s替換,正則表達式.replaceAll("([ ]|\\s|\\u00A0)+","")
如下:
public class Demo1 {
public static void main(String[] args) {
String s2 = "全角空格測試 !!";
System.out.println(s1.replaceAll("([ ]|\\s|\\u00A0)+",""));
// 全角空格測試!!
}
}
方法二:使用String.strip()
我這里的問題是全角空格導致的,所以可以使用String.strip()去除字符串前后的“全角和半角”空白字符
public class Demo1 {
public static void main(String[] args) {
String s3 = "吃了沒\u3000";
System.out.println(s3.trim().length());
System.out.println(s3.strip().length());
// 4 3
System.out.println(s3.strip());
// "吃了沒"
}
注意:JDK11中引入String.strip()
到此這篇關于Java中使用trim()無法去除空格的解決方法的文章就介紹到這了,更多相關Java trim()無法去除空格內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot@Aspect 打印訪問請求和返回數據方式
這篇文章主要介紹了SpringBoot@Aspect 打印訪問請求和返回數據方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot3 Spring WebFlux簡介(推薦)
SpringWebFlux是Spring Framework 5中引入的響應式Web框架,用于支持非阻塞異步通信和響應式流處理,與傳統(tǒng)的SpringMVC相比,WebFlux提供了完全異步非阻塞的編程模型,適用高并發(fā)、微服務架構和實時數據流,本文介紹SpringBoot3 Spring WebFlux簡介,感興趣的朋友一起看看吧2024-10-10
spring啟動后保證創(chuàng)建的對象不被垃圾回收器回收
最近看到一個問題是,spring在啟動后如何保證創(chuàng)建的對象不被垃圾回收器回收?。所以本文結合jvm的垃圾回收機制和spring中的源代碼做出自己的一點猜測。有需要的朋友們可以參考借鑒。2016-09-09
Java線程之鎖對象Lock-同步問題更完美的處理方式代碼實例
這篇文章主要介紹了Java線程之鎖對象Lock-同步問題更完美的處理方式代碼實例,還是挺不錯的,這里分享給大家,需要的朋友可以參考。2017-11-11
Java中關于size()>0?和isEmpt()的性能考量
這篇文章主要介紹了Java中關于size()>0?和isEmpt()性能考量,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02

