我需要在给定字符串中反转5个或更多字符长字。例如: *给定字符串:我的名字是迈克尔。 *输出:我的名字是leahciM。
句子的其余部分保持不变,只是那些长词被颠倒过来。
到目前为止,我提出了这个问题:
public static String spinWords(String sentence) {
String[] splitWords = sentence.split(" ");
String reversedSentence = "";
String reversedWord = "";
for (String str : splitWords) {
if (str.length() >= 5) {
for (int i = str.length() - 1; i >= 0; i--)
reversedWord += (str.charAt(i) + " ");
}
}
}
我已经改变了这些话,但是 1)它们是一个字符串,没有空格 2)我不知道如何将它们放回到字符串中的位置
答案 0 :(得分:5)
这是一个建议:
编写一个反转字符串的方法:
private static String reverse(String s) { ... }
然后在您的main方法中,在必要时调用它:
if (str.length() >= 5) str = reverse(str);
然后你需要将这些单词重新组合在一起,大概是reversedSentence
字符串:
reversedSentence += str + " "; //you will have an extra space at the end
附注:
StringBuilder
可能比字符串连接更有效。List<String>
并在循环后调用reversedSentence = String.join(" ", list)
答案 1 :(得分:4)
您可以使用StringBuilder
public static String spinWords(String sentence) {
String[] splitWords = sentence.split(" ");
StringBuilder builder = new StringBuilder();
for (String str : splitWords) {
if (str.length() < 5) {
builder.append(str);
else
builder.append(new StringBuilder(str).reverse().toString());
builder.append(" ");
}
return builder.toString().trim();
}
答案 2 :(得分:0)
不需要使用其他任何东西,只需检查你的&#34; for&#34;循环并记住添加未反转的字符串。
public static String spinWords(String sentence) {
String[] splitWords = sentence.split(" ");
String reversedSentence = "";
String reversedWord;
for (String str : splitWords) {
if (str.length() >= 5) {
reversedWord = "";
for (int i = str.length() - 1; i >= 0; i--) {
reversedWord += (str.charAt(i));
}
reversedSentence += " " + reversedWord;
} else {
reversedSentence += " " + str;
}
}
return reversedSentence;
}
答案 3 :(得分:0)
在处理StringBuilder
中的元素时,使用splitWords
来构建答案。
您可能还会发现space
的成语具有特殊的首次值(&#34;&#34;)非常有用。
您的原始代码中也存在错误。
所以我会这样做:
public class ReverseLongWord {
public static void main(String[] args) {
String testInput = "My name is Michael";
System.out.println(spinWords(testInput));
}
public static String spinWords(String sentence) {
String[] splitWords = sentence.split(" ");
String reversedSentence = "";
StringBuilder sb = new StringBuilder();
String space = ""; // first time special
String reversedWord = "";
for (String str : splitWords) {
if (str.length() >= 5) {
for (int i = str.length() - 1; i >= 0; i--) {
reversedWord += (str.charAt(i)); // Bug fixed
}
sb.append(space + reversedWord);
} else {
sb.append(space + str);
}
space = " "; // second time and onwards
}
return sb.toString();
}
}
如您所指定的,此程序的输出如下:
My name is leahciM
答案 4 :(得分:-1)
我认为有些人建议的反向方法是最简单的方法,在这里我分享我的实现
public static void main(String[] args) {
System.out.println(concatenatePhrase("My name is Michael"));
System.out.println(concatenatePhrase("Some randoms words with differents sizes and random words"));
}
private static String concatenatePhrase(String phrase) {
StringBuilder completePhrase = new StringBuilder();
String[] phrases = phrase.split(" ");
for (String word : phrases) {
if (word.length() >= 5) {
completePhrase.append(reverseWord(word).append(" "));
} else {
completePhrase.append(word).append(" ");
}
}
return completePhrase.toString().trim();
}
private static StringBuilder reverseWord(String wordPassed) {
StringBuilder word = new StringBuilder(wordPassed);
return word.reverse();
}