给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
package String;
public class LeetCode151_01 {
public static void main(String[] args) {
String s = "Hello LeetCode i love you";
System.out.println(reverseWords(s));
}
public static String reverseWords(String s){
if (s.length()==0 || s==null){
return "";
}/*StringBuilder是一个可以动态改变长度的字符序列,也就是说,你可以在任何时候修改它的内容,增加、删除或替换其中的字符。
这与字符串(String)不同,因为String在Java中是不可变的,一旦创建,其内容就不能被改变。
StringBuilder类提供了一系列方法来操作字符串,比如append()用于在序列的末尾添加新的字符或字符串,
insert()用于在指定位置插入新的字符或字符串,delete()用于删除序列中的某段字符,
replace()用于替换序列中的某段字符,reverse()用于反转序列中的所有字符等。
StringBuilder的一个重要特性是线程不安全,这意味着它不是同步的,不能在多线程环境中安全地共享。
如果需要在多线程环境中使用可变的字符串,应该使用StringBuffer类,它是StringBuilder的线程安全版本。
例如,下面的代码展示了如何使用StringBuilder:
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb); // 输出:Hello World
sb.insert(6, ","); // 在位置6插入逗号
System.out.println(sb); // 输出:Hello, World
sb.delete(0, 5); // 删除位置0到4的字符
System.out.println(sb); // 输出:, World
sb.replace(0, 2, "H"); // 替换位置0到1的字符
System.out.println(sb); // 输出:H World
sb.reverse(); // 反转字符串
System.out.println(sb); // 输出:dlroW H*/
StringBuilder sb = new StringBuilder();
//字符串不为空,它将使用正则表达式\\s+(匹配一个或多个空白符)来分割字符串,得到一个单词数组。
String[] words = s.trim().split("\\s+");
/*trim函数用于移除字符串两端的空白字符,使得字符串更加干净,没有前导或尾随的空白
String str = " Hello World! ";
str = str.trim(); // 结果是 "Hello World!"*/
for (int i = words.length-1; i >=0 ; i--) {
sb.append(words[i]);
if (i!=0){
sb.append(" ");
}
}
return sb.toString();
}
}