[Resuelto] Solución al problema de usar trim() para eliminar espacios al importar Excel en Java

1. Descripción del problema

Durante la operación de importación de Excel, al leer la cadena en la celda, después de obtener la cadena en la celda, utilicé el método trim() de cadena para eliminar los espacios iniciales y finales, y descubrí que no se podía eliminar sin importar qué. .

2. Análisis de causa

Después de buscar por un tiempo, descubrí que se debía a los espacios de ancho completo y medio ancho del método de entrada. El método trim () solo puede eliminar espacios con un valor ASCII de 32 en la cadena, es decir, medio ancho. espacios, pero no puede eliminar espacios de ancho completo.
En otras palabras, recortar o reemplazar solo puede eliminar espacios con un valor ASCII de 32, mientras que los espacios con un valor ASCII de 160 o espacios de ancho completo no se pueden procesar con reemplazar o recortar: algunos se llaman espacios chinos; espacios de medio ancho
: algunos se llaman es un espacio en inglés.
Por ejemplo:
después de activar el ancho completo, el contenido del método de entrada es el siguiente: abcd La 
entrada de ancho medio es la siguiente: abcd, el método de entrada es de ancho medio de forma predeterminada.
Cómo cambiar a medio ancho completo: mayús+espacio

Insertar descripción de la imagen aquí

3. Solución

Opción 1: usar expresiones regulares

La codificación ASCII es de 160 espacios y el equivalente Unicode es \u00A0. Use reemplazar + codificación UNICODE \u00A0 para reemplazar, espacios de ancho completo (\u3000), use el método de reemplazo + caracteres de espacio de ancho completo para reemplazar, espacios ordinarios, use el método de reemplazo + \s para reemplazar, Expression.replaceAll("([ ]|\s|\u00A0)+","")

como sigue:


public class Demo1 {
    
    
  public static void main(String[] args) {
    
    
 		String s2 = "全角空格测试 !!";
        System.out.println(s1.replaceAll("([ ]|\\s|\\u00A0)+",""));
        // 全角空格测试!!
  }
}

Opción 2: usar String.strip()

Mi problema aquí es causado por espacios de ancho completo, por lo que puede usar String.strip() para eliminar los caracteres de espacio en blanco de "ancho completo y medio ancho" antes y después de la cadena.

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());
    // "吃了没"
  }


Nota: String.strip() se introdujo en JDK11. Si su proyecto utiliza un entorno inferior a JDK11, este método no se puede utilizar.

Opción 3: utilizar el método StrUtil.trim() de hutool

Puede utilizar la clase de herramienta StringUtils.trimWhitespace() proporcionada por Spring para eliminar espacios de ancho completo en la cadena.
El código es el siguiente:

/**@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. Resumen

1. El método trim en la clase String de Java solo puede eliminar espacios de medio ancho. Si los espacios no se pueden eliminar, puede considerar usar hutool o la clase de herramienta proporcionada por Spring para probar posibles espacios de ancho completo.

2. Las dependencias pom de hutool son:

<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>5.7.18</version>
</dependency>

Nota: La clase de herramienta StringUtils en apache-commons-lang3 no puede eliminar espacios de ancho completo porque en realidad se llama al método trim() de la clase String.

Supongo que te gusta

Origin blog.csdn.net/m0_37899908/article/details/131385930
Recomendado
Clasificación