Java equals比较同样的字符串返回false问题

在项目中使用easyExcel做模板校验的时候,同样的字符串equals判断为false。这是为什么,有没有知道的,我百思不得其解

img

前面有个 ! 号 你看到m没

在使用 EasyExcel 进行模板校验时,如果相同的字符串进行 equals 比较结果为 false,可能是以下几个原因:

  1. 字符串中包含了额外的空格:两个字符串比较时,如果其中一个字符串包含额外的空格,那么 equals 比较会返回 false。你可以使用 trim 方法去除字符串两端的空格,然后再进行比较。
String str1 = "abc ";
String str2 = "abc";
boolean isEqual = str1.trim().equals(str2);  // 返回 true
  1. 字符编码或格式不一致:有时候字符串虽然看上去完全相同,但它们的编码或格式可能不一致,导致 equals 比较返回 false。你可以尝试使用相等比较方法 equalsIgnoreCase 来忽略大小写进行比较。
String str1 = "abc";
String str2 = "ABC";
boolean isEqual = str1.equalsIgnoreCase(str2);  // 返回 true
  • 这篇博客: 【Java+EasyExcel实现文件导入导出,导入导出如此简单】中的 通过页面导出到指定文件后并下载文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • EmployeeController类

    @GetMapping("/export_employee_excel")
        public void exportEmployeeExcel(HttpServletResponse response) {
            try {
                employeeService.exportEmployeeExcel(response);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    EmployeeService类:

    public void exportEmployeeExcel(HttpServletResponse response) throws IOException {
            List<Employee> kspwStudentSeatList = list();
            try {
                ExcelWriterBuilder workBook = EasyExcel.write(GlobalSet.download_url, Employee.class);
                // sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字
                workBook.sheet("员工信息").doWrite(kspwStudentSeatList);
                downloadTempalate(response);
                System.out.println("写入完成!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 下载文件
         * @param response
         * @throws IOException
         */
        public static void downloadTempalate(HttpServletResponse response) throws IOException {
            // 告诉浏览器用什么软件可以打开此文件
            response.setHeader("content-Type", "application/vnd.ms-excel");
            // 下载文件的默认名称
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("员工信息.xlsx", "utf-8"));
            //4. 创建输入、输出流
            FileInputStream input = new FileInputStream(GlobalSet.download_url);
            ServletOutputStream sos = response.getOutputStream();
    
            //IO流获取文件的字节流,然后再响应给浏览器
            byte[] arr = new byte[1024];
            int res = 0;
            while((res = input.read(arr)) > 0){
                //将读取的内容输出到输出流中
                sos.write(arr, 0, res);
            }
    
            input.close();
            sos.close();
        }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    你好!根据你提供的信息,我了解到你在使用easyExcel做模板校验时遇到了一个问题,即同样的字符串使用equals方法进行比较时返回false。这可能是因为字符串对象的比较需要使用equals方法进行内容比较,而不是使用"=="或者"!="进行引用比较。下面我将给出具体的解决方案来解决你的问题。

    在Java中,字符串对象的比较需要使用equals方法,这是因为字符串是对象,对象的比较使用equals方法来判断对象的内容是否相等。在Java中,"=="和"!="操作符用于判断两个对象是否引用了同一个对象,而不是判断两个对象的内容是否相等。

    解决方法如下:

    1. 使用equals方法进行字符串比较:使用equals方法进行对象的内容比较。例如,你可以这样使用equals方法:
    String str1 = "Hello";
    String str2 = "Hello";
    boolean isEqual = str1.equals(str2);
    System.out.println(isEqual); // 输出结果为true
    

    这段代码会使用equals方法比较str1和str2的内容,由于它们的内容相同,所以isEqual的值为true。

    1. 使用equalsIgnoreCase方法进行字符串比较:如果你需要忽略字符串的大小写进行比较,可以使用equalsIgnoreCase方法。例如:
    String str1 = "Hello";
    String str2 = "hello";
    boolean isEqual = str1.equalsIgnoreCase(str2);
    System.out.println(isEqual); // 输出结果为true
    

    这段代码会使用equalsIgnoreCase方法比较str1和str2的内容,由于它们的内容相同(忽略大小写),所以isEqual的值为true。

    1. 将字符串进行trim操作再进行比较:有时候字符串可能包含前后的空格或者其他不可见字符,这些字符可能会导致equals方法比较的结果为false。你可以使用trim方法去除字符串的首尾空格。例如:
    String str1 = " Hello ";
    String str2 = "Hello";
    boolean isEqual = str1.trim().equals(str2.trim());
    System.out.println(isEqual); // 输出结果为true
    

    这段代码会使用trim方法去除str1和str2的首尾空格,然后使用equals方法比较它们的内容,由于它们的内容相同,所以isEqual的值为true。

    通过上述的方法,你可以正确地比较字符串对象的内容,而不会出现返回false的情况。希望这些解决方案能够帮助到你!如果你还有任何问题,请随时提问。