所以我的问题是关于获取反转的字符串,但只有长于或等于 5 个字符的单词。 因此,如果我们将 ("Hey fellow warriors") 传递给该方法,我们应该得到 "Hey wollef sroirraw"作为返回。我的代码给了我一些奇怪的结果,这些结果是 =“sroirraw fellow warriors”。
这是我的代码,请给我一些线索。不应返回最后一个单词后的空格,但我不知道为什么会这样。
public class PrimeChecker {
public String spinWords(String sentence) {
String[] tablica = sentence.split(" ");
for ( String x : tablica ) {
int y = 0;
if ( x.length() >= 5 ) {
StringBuilder p = new StringBuilder(x).reverse();
x = p.toString();
}
tablica[y] = x;
y++;
}
StringBuilder wynik = new StringBuilder();
for ( String z : tablica ) {
int y = 0;
tablica[y] = z;
wynik.append(tablica[y]);
if (tablica.length > 1 && y != tablica.length - 1 ) {
wynik.append(" ");
}
y++;
}
return wynik.toString();
}
}
测试人员
public class PrimeCheckerTest {
public static void main(String[] args) {
PrimeChecker obiekt = new PrimeChecker();
System.out.println(obiekt.spinWords("Hey fellow warriors").toString());
}
}
最佳答案
首先,我更愿意用匹配一个或多个空白字符的 \\s+
进行拆分。其次,我将在我拆分
的标记上使用带有Arrays.stream
的lambda。然后我将 map
每个单词,将每个单词与 5 个或更多字符反转。这可以通过 StringBuilder
和 reverse()
来完成。由于此方法不需要任何实例状态,我们可以将其设为static
。最后,使用 Collector
将单词背面连接在一起。喜欢,
public static String spinWords(String sentence) {
return Arrays.stream(sentence.split("\\s+"))
.map(s -> s.length() >= 5 ? new StringBuilder(s).reverse().toString() : s)
.collect(Collectors.joining(" "));
}
测试一下
public static void main(String[] args) {
System.out.println(spinWords("Hey fellow warriors"));
}
哪个给出(如指定的)
Hey wollef sroirraw
关于java - 字符串反转,结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182195/