Java 颠倒字符串中的某些单词
我需要在给定字符串中反转5个或更多字符长的单词。例如: *给定字符串:我的名字是迈克尔。 *输出:我的名字是leahciM 句子的其余部分保持不变,只是那些长单词被颠倒了过来 到目前为止,我得出了以下结论:Java 颠倒字符串中的某些单词,java,Java,我需要在给定字符串中反转5个或更多字符长的单词。例如: *给定字符串:我的名字是迈克尔。 *输出:我的名字是leahciM 句子的其余部分保持不变,只是那些长单词被颠倒了过来 到目前为止,我得出了以下结论: public static String spinWords(String sentence) { String[] splitWords = sentence.split(" "); String reversedSentence = ""; String reve
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我不知道如何将它们放回字符串中的位置,这里有一个建议:
编写一个反转字符串的方法:
private static String reverse(String s) { ... }
然后在main方法中,在必要时调用它:
if (str.length() >= 5) str = reverse(str);
然后,您需要将这些单词重新组合在一起,大概放在倒转的句子字符串中:
旁注:
对于较长的句子,使用StringBuilder可能比字符串连接更有效。
您可以将所有单词放回循环中的列表中,并在循环后调用reversedSession=String.join,List
可以在一行中反转字符串-您应该可以在stackoverflow上找到许多相关的Q&a。
这里有一个建议:
编写一个反转字符串的方法:
private static String reverse(String s) { ... }
然后在main方法中,在必要时调用它:
if (str.length() >= 5) str = reverse(str);
然后,您需要将这些单词重新组合在一起,大概放在倒转的句子字符串中:
旁注:
对于较长的句子,使用StringBuilder可能比字符串连接更有效。
您可以将所有单词放回循环中的列表中,并在循环后调用reversedSession=String.join,List
可以在一行中反转字符串-您应该可以在stackoverflow上找到许多相关的Q&a。
您可以使用StringBuilder
您可以使用StringBuilder
不需要使用任何你几乎拥有的东西,只需检查循环并记住添加未反转的字符串
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;
}
不需要使用任何你几乎拥有的东西,只需检查循环并记住添加未反转的字符串
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;
}
在处理splitWords中的元素时,使用StringBuilder生成答案
你也可能会发现具有特殊首次价值的空间习惯用法很有用
您的原始代码中也有一个bug
下面是我要做的:
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
在处理splitWords中的元素时,使用StringBuilder生成答案
你也可能会发现具有特殊首次价值的空间习惯用法很有用
您的原始代码中也有一个bug
下面是我要做的:
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
我认为一些人建议的反向方法是最简单的方法,这里我分享我的实现
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();
}
我认为一些人建议的反向方法是最简单的方法,这里我分享我的实现
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();
}
有没有办法去掉最后的空间?我真的很喜欢你的方法,不起诉StringBuilder,我不认为我可以在codewars中使用其他库。@doublemc你可以将所有单词放回循环中的列表中,并调用ReversedSession=String.join,在循环后列出或使用Stringtrim@doublemc一个技巧是在你的循环中有一个布尔值firstWord=true:如果firstWord{result=str;firstWord=false;}或者{result+=+str;}@assylias老实说,我刚刚检查了一下,如果我有一个很长的第一个词,例如Michael是我的名字,它不会颠倒过来。我应该把它放在哪里?从现在开始:@assylias好吧,刚刚使用了方法trim,效果非常好!有没有办法去掉最后的空间?我真的很喜欢你的方法,不起诉StringBuilder,我不认为我可以在codewars中使用其他库。@doublemc你可以将所有单词放回循环中的列表中,并调用ReversedSession=String.join,在循环后列出或使用Stringtrim@doublemc一个技巧是在你的循环中有一个布尔值firstWord=true:如果firstWord{result=str;firstWord=false;}或者{result+=+str;}@assylias老实说,我刚刚检查了一下,如果我有一个很长的第一个词,例如Michael是我的名字,它不会颠倒过来。我应该把它放在哪里?从现在开始:@assylias好吧,刚刚使用了方法trim,效果非常好!