我目前有一个程序可以将一个字符串的标记单独转换成它们的对应物。但是,程序需要将它们插回到它们所带的字符串中,并包含所有原始字符。
Hasta la vista baby. - the Terminator.
Hasta
astaHay
la
alay
vista
istavay
baby
abybay
the
ethay
Terminator
erminatorTay
这些是所有单词及其转换。我尝试了一种方法直接将它们放回去,但是考虑到缺少的字符和不同的长度使我很难做到这一点。我试图根据每个令牌的长度插入字符,但是当有超过1个空白字符时会遇到并发症。我如何将这些单词插回到字符串中,使它看起来像这样:
Astahay alay istavay abybay. - ethay Erminatortay
PigOrig = key.readLine();
String[] PigSplit = PigOrig.split("\\W+");
for(int i = 0; i < PigSplit.length; i++)
{
if(PigSplit[i] != null)
{
FinalStr += Piggy.vowelOut(PigSplit[i]); // VowelOut returns the converted word only, no trailing whitespace or punctuation
lengthtot += PigSplit[i].length();
FinalStr += PigOrig.charAt(lengthtot); // attempt at adding up the words and inserting the original punctuation that was in the string PigOrig
lengthtot ++;
}
}
答案 0 :(得分:1)
如果我理解了您的问题,那么如何用字符串中的翻译替换每个单词?&#39;最简单的方法是使用String.replace
。
因此,如果您创建了translate
方法,那么您可以执行以下操作:
String line = key.readLine();
for (String word: line.split("\\W+"))
line = line.replace(word, translate(word));
这种方法的优点是你要替换原始字符串中的单词而不是将单词重新组合在一起。
另请注意,仅使用模式匹配进行翻译可能更容易。例如:
private String translate(String word) {
Matcher match = Pattern.compile("(\\w*)([aeiou]\\w*)").match(word);
if (match.matches())
return match.group(2) + match.group(1) + "ay";
else
return word;
}
答案 1 :(得分:0)
如果我理解你想要翻译输入中的所有单词,我的口味就是从头开始构建新的字符串:
String pigOrig = key.readLine();
String[] pigSplit = pigOrig.split("\\W+");
StringBuilder buf = new StringBuilder(pigOrig.length());
buf.append(translateWord(pigSplit[0]));
for(int i = 1; i < pigSplit.length; i++) {
buf.append(' ');
buf.append(translateWord(pigSplit[i]));
}
String result = buf.toString();