Java将修改后的标记添加到字符串

时间:2016-10-25 04:06:09

标签: java

我目前有一个程序可以将一个字符串的标记单独转换成它们的对应物。但是,程序需要将它们插回到它们所带的字符串中,并包含所有原始字符。

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 ++;
         }

    }

2 个答案:

答案 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();