トリムでスペースが削除できない問題の解決策
1. 問題の説明
Excelのインポート操作中、セル内の文字列を読み取る際、セル内の文字列を取得した後、文字列のtrim()メソッドを使用して先頭と末尾のスペースを削除しましたが、どうやっても削除できないことがわかりました。 。
2. 原因分析
しばらく調べてみたところ、インプットメソッドの全角スペースと半角スペースが原因であることがわかり、trim()メソッドでは文字列内のASCII値が32のスペース、つまり半角しか削除できませんでした。スペースは使用できますが、全角スペースは削除できません。
つまり、トリムまたは置換では ASCII 値 32 のスペースのみを削除できますが、ASCII 値 160 のスペースまたは全角スペースは置換またはトリムでは処理できません。一部のスペースは中国語スペースと呼ばれ、半角スペースと呼ばれます
。英語のスペースと呼ばれるものもあります。
例:
全角をオンにした後の入力方法の内容は次のとおりです: abcd
半角入力は次のようになります: abcd、入力方法はデフォルトで半角です。
全半角に切り替える方法:shift+space
3. 解決策
オプション 1: 正規表現を使用する
ASCII エンコードは 160 個のスペースで、Unicode に相当するものは \u00A0 です。置換+UNICODE エンコード \u00A0 を使用して全角スペース (\u3000) を置換し、置換メソッド + 全角スペース文字を使用して通常のスペースを置換します。 replace メソッド + \s を使用して置換します。正規 Expression.replaceAll("([ ]|\s|\u00A0)+","")
次のように:
public class Demo1 {
public static void main(String[] args) {
String s2 = "全角空格测试 !!";
System.out.println(s1.replaceAll("([ ]|\\s|\\u00A0)+",""));
// 全角空格测试!!
}
}
オプション 2: 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());
// "吃了没"
}
注: String.strip() は JDK11 で導入されたため、プロジェクトが JDK11 以下の環境を使用している場合、このメソッドは使用できません。
オプション 3: hutool の StrUtil.trim() メソッドを使用する
Spring が提供するツール クラス StringUtils.trimWhitespace() を使用すると、文字列内の全角スペースを削除できます。
コードは次のとおりです。
/**@Description: 全角 空格去除测试
*/
@Test
public void test2(){
String sLeft = " 左全角空格";
String sMid = " 两边 全角空格 ";
String sRight = "右边全角空格 ";
System.out.println("String工具类 left:"+ org.springframework.util.StringUtils.trimTrailingWhitespace(sLeft));
System.out.println("String工具类 mid:"+ org.springframework.util.StringUtils.trimTrailingWhitespace(sMid));
System.out.println("String工具类 right:"+ org.springframework.util.StringUtils.trimTrailingWhitespace(sRight));
// 使用 hutool的 StrUtil
System.out.println("Hutool StrUtil 工具类 left:"+StrUtil.trim(sLeft));
System.out.println("Hutool StrUtil 工具类 mid:"+StrUtil.trim(sMid));
System.out.println("Hutool StrUtil 工具类 right:"+StrUtil.trim(sRight));
}
/**@Description:Hutool StrUtil 去除普通半角空格
* <br> 半角空格=英文空格; 全角空格=中文空格
*/
@Test
public void test3(){
String sLeft = " 左半角 右全角 ";
System.out.println("原始字符串:"+sLeft);
System.out.println("hutool :"+StrUtil.trim(sLeft));
System.out.println("StringUtil :"+StringUtils.trim(sLeft));
System.out.println("Spring StringUtil :"+ org.springframework.util.StringUtils.trimWhitespace(sLeft));
// 去掉 字符串中全部空格
System.out.println(org.springframework.util.StringUtils.trimAllWhitespace(sLeft));
sLeft = StrUtil.trim(sLeft);
System.out.println("最终去除效果:"+sLeft);
}
4. まとめ
1. JavaのStringクラスのtrimメソッドでは半角スペースしか削除できませんが、スペースが削除できない場合は、hutoolやspringが提供するツールクラスを利用して、可能な全角スペースを試してみるのも良いでしょう。
2. hutool の pom 依存関係は次のとおりです。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.18</version>
</dependency>
注: apache-commons-lang3 の StringUtils ツール クラスは、実際には String クラスの Trim() メソッドが呼び出されるため、全角スペースを削除できません。