Java函数:如何在字符串中反转单词的顺序?
发布时间:2023-07-29 19:45:41
在Java中,我们可以使用不同的方法来反转字符串中单词的顺序。下面是几种常见的方法。
1. 使用split和StringBuilder:
我们可以首先使用split函数将字符串分割成单词数组,然后使用StringBuilder逆序追加单词到字符串中。
public static String reverseWords(String s) {
// 分割字符串,获取单词数组
String[] words = s.split(" ");
// 使用StringBuilder逆序追加单词
StringBuilder reverse = new StringBuilder();
for (int i = words.length - 1; i >= 0; i--) {
reverse.append(words[i]);
if (i != 0) {
reverse.append(" ");
}
}
return reverse.toString();
}
2. 使用自定义函数:
我们也可以使用自定义函数来实现字符串中单词的逆序。
public static String reverseWords(String s) {
// 删除字符串中多余的空格
s = s.trim();
// 使用正则表达式将多个空格替换成一个空格
s = s.replaceAll(" +", " ");
// 将字符串转为字符数组
char[] chars = s.toCharArray();
// 对字符数组进行逆序操作
reverse(chars, 0, chars.length - 1);
// 对每个单词进行逆序操作
reverseWords(chars);
// 将字符数组转为字符串
return new String(chars);
}
private static void reverse(char[] chars, int start, int end) {
while (start < end) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
}
private static void reverseWords(char[] chars) {
int start = 0;
int end = 0;
int n = chars.length;
while (start < n) {
while (end < n && chars[end] != ' ') {
end++;
}
reverse(chars, start, end - 1);
start = end + 1;
end++;
}
}
3. 使用StringTokenizer:
我们也可以使用Java中的StringTokenizer类来分割字符串,并使用栈逆序输出。
import java.util.StringTokenizer;
import java.util.Stack;
public static String reverseWords(String s) {
// 使用StringTokenizer分割字符串
StringTokenizer tokenizer = new StringTokenizer(s);
// 使用栈逆序输出单词
Stack<String> stack = new Stack<>();
while (tokenizer.hasMoreTokens()) {
stack.push(tokenizer.nextToken());
}
// 构建逆序单词字符串
StringBuilder reverse = new StringBuilder();
while (!stack.isEmpty()) {
reverse.append(stack.pop());
if (!stack.isEmpty()) {
reverse.append(" ");
}
}
return reverse.toString();
}
以上就是几种反转字符串中单词顺序的常见方法,在实际使用中可以根据具体需求选择合适的方法来实现。
