/* * 字符串比如“ad2 lsdkf, lksdjf. sdkfj”倒序排列"sdkfj lksdjf. lsdkf, ad2" 每个单词是空格分开,标点符号当作字母, * 不能用String的自带的一些方法,比如indexof,trim,split等方法。 */ public class Test { // 反转字符串中的单词顺序 static String reverseWords(String str) { // 由于题目限制,所以使用数组解决此问题 char[] result = new char[str.length()]; // 记录最近一次扫描到的空格位置 int lastSpace = result.length; // 从原字符串的尾部开始扫描,并把结果输出到结果数组 for( int si = result.length - 1, ri = 0; si >= 0; si-- ) { // 如果扫描到空格 if( str.charAt(si) == ' ' ) { // 就把这个空格和最近一次扫描到的空格之间的内容(也就是一个单词)输出到结果数组 for( int sj = si + 1; sj < lastSpace; sj++, ri++ ) result[ri] = str.charAt(sj); // 再把扫描到的空格输出到结果数组 result[ri] = ' '; ri++; // 记录最近一次的扫描到的空格位置 lastSpace = si; } } // 把原字符串中的第一个单词输出到结果数组 for( int si = lastSpace - 1, ri = result.length - 1; si >= 0; si--, ri-- ) result[ri] = str.charAt(si); return new String(result); } public static void main(String[] args) { String test = "ad2 lsdkf, lksdjf. sdkfj"; System.out.println(reverseWords(test)); } }