有一个类似:“this is a book !”的字符串,要求把字符串反转成“! book a is this”,反转单词倒是好说,但是要求两个单词中的空格数不一定,而且不能有缺失
思路:先把字符串切割成一个字符串数组,按照“”进行切割。或者转成char[] 也是可以的
然后再去遍历这个数组
如果当前的字符串不是" “,就一直添加到一个StringBuffer中,如果遍历到了空格,就说明单词结束了,就将这个单的StringBuffer添加到一个List中,并且把这个StringBuffer置空
如果当前的字符串是” ",就一直添加另一个StringBuffer中,如果遍历到字母,就说明不定长的空格结束了,就将这个不定长的空格字符串继续加到List中,然后置空这个StringBuffer()这样list中的元素不是单词就是一个不定长的空格,但是要注意,因为每次的添加操作都是在下一次遍历时进行,所以最后一个单词或者空格要单独做处理,然后反转这个list即可
表达能力有限,描述的不明不白,直接上代码吧
// 反转字符串
// "this is a book , is very good !" 反转成 "! good very is , book a is this"
// 坑:中间的空格不确定,但是反转后不能丢失空格,以单词维度进行反转
public String reverse(String str){
String [] strArray = str.split("");
// 装载每一个单词
StringBuffer word = new StringBuffer();
// 装载每一个不定长的空格
StringBuffer space = new StringBuffer();
// 最终的反转字符串
StringBuffer reverseStr = new StringBuffer();
// 每一个单词或者空格,按照顺序添加到该list中
List finalStr = new ArrayList();
// 不用增强for,因为遍历到最后一次,要做单独处理,要通过索引判断最后一次的遍历
for (int i = 0; i 0; i--) {
reverseStr.append(finalStr.get(i-1));
}
return reverseStr.toString();
}
调用
@Test
public void test999(){
String s = " this is a book , is very good ! ";
System.out.println(reverse(s));
}
结果:
原创文章 4获赞 0访问量 174
关注
私信
展开阅读全文
作者:也曾想一把guitar走天涯