JAVA字符串中,只要有连续的空格就去掉且但要保留一个空格;如果只是一个空格就不用处理;怎么实现?

举个例子:
String str = "大 家 好 啊";
这里“大家”之间有3个空格,“家好”之间有2个空格,“好啊”之间有1个空格,现在要求是把“大家”和“家好”之间的空格都处理成1个空格,“好啊”之间本身就是一个空格,不用处理;
最终效果就是这样:
String str = "大 家 好 啊";
String keywords = request.getParameter("values").trim();
String result = "";

for(int i = 0; i <= keywords.length(); i++){
for(int j = i + 1; j< keywords.length(); j++){
if(keywords.charAt(i) == ' '){
if(keywords.charAt(j) == ' '){
result = keywords.replace(" ", "");
}
}
}
}
System.out.println(result);
}
-----------------------------
输出结果为:
大家好啊
-----------------------------
请问,你能不能给出代码,或帮我修改下我的代码?

一个循环就可以了
用一个布尔值作为前一个字符是否为空格,
当前字符也是空格,就不用插入了

String keywords = "大 家 好 啊";
StringBuilder result = new StringBuilder();
boolean space = false;// 前一个是否为空格,默认第一个不是
for (int i = 0; i < keywords.length(); i++) {
if (keywords.charAt(i) != ' ') {
space = false;
result.append(keywords.charAt(i));
} //end 当前不是空格
else if (!space) {
space = true;
result.append(keywords.charAt(i));
}//end 当前是空格,但前一个不是空格

//没有else了,省略了当前是空格,前一个也是空格,当然不用理它了
}
System.out.println(keywords);
System.out.println(result.toString());
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-16
可以直接用正则表达式
public void lianxuStr()
{
String s="大 家 好 啊";
String xx=s.replaceAll("[\\s]{2,}", " ");
System.out.println(xx);
}
第2个回答  2010-12-16
写两个循环...第一个读到空格就判断下一格是不是空格...是的话把它去掉...
然后直到没有改变退出第二个循环...
第3个回答  2010-12-16
String s = "大 家 好 啊";
s = s.replaceAll(" +", " ");
System.out.println(s);
第4个回答  2010-12-16
string.replaceAll("\\s+"," ");
相似回答