[解決済み] JavaでExcelをインポートするときにtrim()を使用してスペースを削除する問題の解決策

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() メソッドが呼び出されるため、全角スペースを削除できません。

おすすめ

転載: blog.csdn.net/m0_37899908/article/details/131385930