字符串中的单词反转

将一句英文语句中的每个单词进行反转,空格及标点符号保持不变。
如"hi,nice to meet you!" 反转后结果为:"ih,ecin ot teem uoy!"
输入、输出描述
输入:
英文语句字符串
输出:
每个单词反转后的语句字符串
Example
输入:
hi,nice to meet you!
输出:
ih,ecin ot teem uoy!
先将字符串转换成字符数组,然后采用两个指针,分别记录每个单词的首字母和尾字母在字符数组中的下标,将字符数组中这两个下标之间的字符翻转即可。
代码:
import java.util.*;

public class Main {
  public void swapStr(char[] array, int begin, int end) {
    while (begin < end) {
      char tmp = array[begin];
      array[begin] = array[end];
      array[end] = tmp;
      begin++;
      end--;
    } 
  }
  //判断一个字符是否是数字或字母
  public boolean isNumOrLetter(char a) {
    return ((a >='0'&&a<='9') || (a>='A'&&a<='Z') || (a>='a'&&a<='z'));
  }

  public String solution(String input) {
    if(input == null){
      return null;
    }
    char[] array = input.toCharArray();//将字符串转为数组
    int begin = 0;
    int end = 0;
    //考虑字符串的首部有空格或标点符号且可能单词间有多个空格或标点符号
    int i = 0;
    while (i<array.length) {
      //找到每个单词的首字母对应的下标
      while (i<array.length && !isNumOrLetter(array[i])) {
        i++;
      }
      begin = i;//单词首字母的下标
      while (i<array.length && isNumOrLetter(array[i])) {//获取单词尾字母后第一个空格或标点符号的下标
        i++;
      }
      end = i-1;//单词尾字母
      swapStr(array, begin, end);
    }
    String result = new String(array);
    return result;
  }
}
一个创业中的苦逼程序员
评论专区

隐藏