断点调试,发现一个问题:字符串的空格,利用trim()和replace()方法,无法去掉空格:
原来: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
批量处理文件夹下的文件名,去除空格
/**
* 递归遍历文件夹获取文件
*/
public static void recursiveTraversalFolder(String path) {
File folder = new File(path);
if (folder.exists()) {
File[] fileArr = folder.listFiles();
if (null == fileArr || fileArr.length == 0) {
System.out.println("文件夹是空的!");
return;
} else {
File newDir = null;//文件所在文件夹路径+新文件名
String newName = "";//新文件名
String fileName = null;//旧文件名
File parentPath = new File("");//文件所在父级路径
for (File file : fileArr) {
if (file.isDirectory()) {//是文件夹,继续递归,如果需要重命名文件夹,这里可以做处理
System.out.println("文件夹:" + file.getAbsolutePath() + ",继续递归!");
recursiveTraversalFolder(file.getAbsolutePath());
} else {//是文件,判断是否需要重命名
fileName = file.getName();
parentPath = file.getParentFile();
if (fileName.contains(oldString)) {//文件名包含需要被替换的字符串
newName = fileName.replaceAll("\\u00A0+", "");//新名字
newDir = new File(parentPath + "/" + newName);//文件所在文件夹路径+新文件名
file.renameTo(newDir);//重命名
System.out.println("修改后:" + newDir);
}
}
}
}
} else {
System.out.println("文件不存在!");
}
}