断点调试,发现一个问题:字符串的空格,利用trim()和replace()方法,无法去掉空格:
    20190402155542287.png
    原来:ASCII码中有两种特殊空格,虽然显示一样,但对应的的ASCII 码值不一样(一个码值32,一个码值160)。

    在Web开发时,ASCII码只要加上 &# 和 ; 就可以变成Web可以辨认的字符。
    下边是查看字符对应ASCII值的逻辑:

    final char c1 = ‘ ‘; //码值160的空格
    final char c2 = ‘ ‘; //手动输入的空格
    System.out.println((int)c1); //160
    System.out.println((int)c2); //32

    ASCII值是32:是用键盘输入的空格,
    ASCII值是160:不间断空格(non-breaking space,缩写nbsp),即   所产生的空格,作用是在页面换行时不被打断,如下:

    页面某一行的末尾是一个人名Zhang Xiaoming

    我们希望在换行时人名不会被打断,导致Zhang 在第一行末尾,而Xiaoming跑到第二行开头,而是保持完整的人名在同一行的末尾,于是就有了不间断空格。(在word中也有这种空格的使用)。如果使用了平常的空格,就会被页面压缩,变成下边这样

    页面某一行的末尾是一个人名Zhang
    Xiaoming

    不间断空格有个特点:无法被trim()所裁剪,也无法被正则表达式的\s所匹配。
    我们可以利用不间断空格的Unicode编码来移除它,其编码为\u00A0。解决办法如下:
    replace(“\u00A0”, “”)
    replaceAll(“\u00A0+”, “”) //这是正则表达式的写法

    String str = “aacsdfe “; //包含了不间断空格的字符串
    str = str.replace(“\u00A0”, “”);
    str = str.replaceAll(“\u00A0+”, “”);
    ————————————————
    版权声明:本文为CSDN博主「LVXIANGAN」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/LVXIANGAN/article/details/88974955
    批量处理文件夹下的文件名,去除空格

    1. /**
    2. * 递归遍历文件夹获取文件
    3. */
    4. public static void recursiveTraversalFolder(String path) {
    5. File folder = new File(path);
    6. if (folder.exists()) {
    7. File[] fileArr = folder.listFiles();
    8. if (null == fileArr || fileArr.length == 0) {
    9. System.out.println("文件夹是空的!");
    10. return;
    11. } else {
    12. File newDir = null;//文件所在文件夹路径+新文件名
    13. String newName = "";//新文件名
    14. String fileName = null;//旧文件名
    15. File parentPath = new File("");//文件所在父级路径
    16. for (File file : fileArr) {
    17. if (file.isDirectory()) {//是文件夹,继续递归,如果需要重命名文件夹,这里可以做处理
    18. System.out.println("文件夹:" + file.getAbsolutePath() + ",继续递归!");
    19. recursiveTraversalFolder(file.getAbsolutePath());
    20. } else {//是文件,判断是否需要重命名
    21. fileName = file.getName();
    22. parentPath = file.getParentFile();
    23. if (fileName.contains(oldString)) {//文件名包含需要被替换的字符串
    24. newName = fileName.replaceAll("\\u00A0+", "");//新名字
    25. newDir = new File(parentPath + "/" + newName);//文件所在文件夹路径+新文件名
    26. file.renameTo(newDir);//重命名
    27. System.out.println("修改后:" + newDir);
    28. }
    29. }
    30. }
    31. }
    32. } else {
    33. System.out.println("文件不存在!");
    34. }
    35. }