我正在开发一个程序,将星球大战中的自然英语转换成Yoda风格的英语。单句转换看起来很好,但是当涉及多个句子时我遇到了问题。这是我的代码。
public class Yodify{
public static void main(String[] args){
String sentence = "i like dogs. i like cats.";
String[] paragraph = sentence.split("\\.");
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < paragraph.length; i++){
String[] temp = paragraph[i].split(" ");
for (int x = 2; x < temp.length; x++){
sb.append([temp[x]).append(" ");
}
sb2.append(sb).append(temp[0]).append(" ").append(temp[1]).append(". ");
}
System.out.println(sb2.toString);
}
}
我的输出:
我喜欢的狗。狗我喜欢的猫。
预期产出:
我喜欢的狗。我喜欢的猫。
我已经调试了好几个小时了,我找不到我需要的东西@ googling my problem。
答案 0 :(得分:1)
此代码存在以下问题:
for (int x = 2; x < temp.length; x++){
sb.append([temp[x]).append(" "); <--------------
这会将每个句子的第三个单词附加到每个循环后都没有清除的字符串构建器。因此,在进入循环之前,sb
的内容对于您的示例输出看起来像这样:
sb i paragraph
"" 0 i like dogs
"dogs" 1 i like cats
对此的一个简单修复是直接附加到sb2
的for-loop intead中的sb
:
for (int x = 2; x < temp.length; x++){
sb2.append([temp[x]).append(" ");
}
答案 1 :(得分:0)
似乎你试图实现一个超简单的算法: 将最后一个单词移到句子的开头。 实际上,对于尤达而言,还有更多的东西。
更正程序中的编译错误和其他问题, 通过一些额外的改进,实现变为:
String sentence = "i like dogs. i like cats.";
String[] paragraph = sentence.split("\\. *");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < paragraph.length; i++) {
String[] temp = paragraph[i].split(" ");
builder.append(temp[temp.length - 1]);
for (int x = 0; x < temp.length - 1; x++){
builder.append(" ").append(temp[x]);
}
builder.append(". ");
}
System.out.println(builder.toString());