Java 字符串反转,结果错误
所以,我的问题是得到反向字符串,但只得到更长或等于5个字符的单词。 因此,如果我们通过(“嘿,勇士们”)的方法,我们应该得到“嘿,沃尔夫·斯罗亚罗”作为回报。我的代码给出了一些奇怪的结果,它们是=“sroirraw战友” 这是我的密码,请给我一些线索。最后一个单词后面的空格不应该被返回,但我不知道为什么Java 字符串反转,结果错误,java,string,reverse,Java,String,Reverse,所以,我的问题是得到反向字符串,但只得到更长或等于5个字符的单词。 因此,如果我们通过(“嘿,勇士们”)的方法,我们应该得到“嘿,沃尔夫·斯罗亚罗”作为回报。我的代码给出了一些奇怪的结果,它们是=“sroirraw战友” 这是我的密码,请给我一些线索。最后一个单词后面的空格不应该被返回,但我不知道为什么 public class PrimeChecker { public String spinWords(String sentence) { String[] tablica = s
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+
进行拆分。其次,我将在标记Isplit
上使用带有array.stream
的lambda。然后我将映射每个单词,用5个或更多字符反转每个单词。这可以通过StringBuilder
和reverse()
实现。由于这个方法不需要任何实例状态,我们可以使它静态。最后,用收集器将单词backs连接在一起。像
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"));
}
其中给出(按规定)
下面的代码将起作用。您已经在循环中添加了y=0。这是没有必要的
public class PrimeChecker {
public String spinWords(String sentence) {
String[] tablica = sentence.split(" ");
int y = 0;
for ( String x : tablica ) {
if ( x.length() >= 5 ) {
StringBuilder p = new StringBuilder(x).reverse();
x = p.toString();
}
tablica[y] = x;
y++;
}
StringBuilder wynik = new StringBuilder();
y=0;
for ( String z : tablica ) {
tablica[y] = z;
wynik.append(tablica[y]);
if (tablica.length > 1 && y != tablica.length - 1 ) {
wynik.append(" ");
}
y++;
}
return wynik.toString();
}
}
您需要在循环的中定义y,并且在第二个循环之前将其值设为零,因为您可以重置每个循环的y值。您可以用一种更简单的方法执行此操作:
public String spinWords(String sentence) {
String[] tablica = sentence.split(" ");
for (int i = 0; i < tablica.length; i++) {
if(tablica[i].length() >= 5) {
StringBuilder p = new StringBuilder(tablica[i]).reverse();
tablica[i] = p.toString();
}
}
StringBuilder builder = new StringBuilder();
for(String s : tablica) {
builder.append(s + " ");
}
String str = builder.toString();
return str;
}
publicsstringspinwords(字符串语句){
String[]tablica=句子.split(“”);
for(int i=0;i=5){
StringBuilder p=新的StringBuilder(tablica[i]).reverse();
tablica[i]=p.toString();
}
}
StringBuilder=新的StringBuilder();
用于(字符串s:tablica){
builder.append(s+“”);
}
字符串str=builder.toString();
返回str;
}
Typo:int y=0
应该是循环外的。这意味着您当前在每次迭代时,都会使用默认的0
值再次覆盖y
。哦,我的天啊,我太瞎了,谢谢:oYou还有很多toString()
方法调用。您不需要prntln中的字符串,因为spinWords返回字符串。您不必toString
aString
,因为Java 8中有String.join,所以第二个循环可能会被它取代。谢谢,我是初学者,这就是为什么我甚至不知道map和collect机制以及您介绍的语法的原因,但我的代码会如此简短和清晰,令人惊讶。
public String spinWords(String sentence) {
String[] tablica = sentence.split(" ");
for (int i = 0; i < tablica.length; i++) {
if(tablica[i].length() >= 5) {
StringBuilder p = new StringBuilder(tablica[i]).reverse();
tablica[i] = p.toString();
}
}
StringBuilder builder = new StringBuilder();
for(String s : tablica) {
builder.append(s + " ");
}
String str = builder.toString();
return str;
}