将字符串两边的空格(包括全角和半角)去掉,字符串内部的空格不能去。

本人曾经试图不使用Java正则表达式,只使用 java.lang.String 中所提供的 API, 虽然能实现,不过要写一堆代码, 现将不使用 Java 正则表达式和使用 Java 正则表达式的代码写出,做个笔记。

A 不使用 Java正则表达式, 有点麻烦^_^

public class SpaceChecker {
public static void main(String[] args) {
String str = "  a  b  c  ";
System.out.println(delSpace(str));
}
public static String delSpace(String str) {
if(str == null) {
return null;
}
// 先将半角空格删除
str = str.trim();
while (str.startsWith(" ")) {
// 只可惜String中没有提供replaceLast(), 否则就简单点了
// 所以本循环完成以后,只能将字符串前端的空格删除,却不能删除后端的空格
// 故而本循环完成后,又将字符串翻转后再去一次空格
str = str.replaceFirst(" ", "");
// 一定要 trim(), 不然的话,如果前端的空格是全角和半角相间的话,就搞不定了
str = str.trim();
}
// 将字符串翻转
str = reverse(str);
// 再去一次空格
while (str.startsWith(" ")) {
str = str.replaceFirst(" ", "");
str = str.trim();
}
// 最后再将字符串翻转回去
return str = reverse(str).trim();
}
// 自定义的字符串翻转方法。
// 很多第三方的包的都有实现,但是 Java API 没有实现,这里自己实现一下 ^_^
public static String reverse(String str){
char[] charsOld = str.toCharArray();
char[] charsNew = new char[charsOld.length];
int index = charsOld.length-1;
for (int i = 0; i < charsOld.length ; i++) {
charsNew[i] = charsOld[index - i];
}
return String.valueOf(charsNew);
}
}

B  使用 Java 正则表达式

public class SpaceChecker {
public static void main(String[] args) throws Exception {
SpaceCheck sc = new SpaceCheck();
String str = "  a  b  c  ";
System.out.println(sc.delSpace(str));
}
public String delSpace(String str) throws Exception {
if (str == null) {
return null;
}
String regStartSpace = "^[  ]*";
String regEndSpace = "[  ]*$";
// 连续两个 replaceAll
// 第一个是去掉前端的空格, 第二个是去掉后端的空格
// 本来想一气呵成,但是未能实现 ^_^
String strDelSpace = str.replaceAll(regStartSpace, "").replaceAll(regEndSpace, "");
return strDelSpace;
}
}