2016-10-25 47 views
0

我目前有一个程序,可以将字符串的标记单独转换为它们的明胶对应物。但是,该程序需要将它们插回到与之一起拍摄的字符串中,其中包含所有原始字符。将修改后的标记添加到字符串中的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 ++; 
     } 

    } 
+0

显示你的代码,然后人就可以建议需要改变什么。 –

+0

@SabirKhan添加了它。 –

+0

你知道如何使用HashMap吗? –

回答

1

如果我明白你的问题,这是“我怎么替换每个词与它在一个字符串翻译?最简单的方法是使用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; 
} 
+0

案例:如果你输入Contains'be'和'ebay','be'将被替换为'ebay',之后*两个* ebay将会被替换。 –

+0

工作很好,谢谢。我用 –

+0

line = line.replace(PigOrig [i],Piggy.translator(PigOrig [i]));我很惊讶,我没有想到这样一个简单的解决方案,我的头脑还没有完全掌握阵列的工作方式。感谢您的解决方案,帮了我很多! –

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(); 
+0

其赋值允许使用像数组这样的基本元素。 –

+0

在这种情况下,System.out.print()是基本的吗?只需使用它来代替'buf.append()'并用'System.out.println()'完成(当我是教练的时候,我会为了使用课程中尚未涉及的概念而给予额外的信任)。 –

相关问题