【发布时间】:2016-09-18 00:56:27
【问题描述】:
我一直在开发一个将英语单词转换为 Pig Latin 的 Java 程序。我已经完成了所有基本规则,例如附加 -ay、-way 等,以及特殊情况,例如 question -> estionquay、rhyme -> ymerhay,并且我还处理了大写(Thomas -> Omasthay)。但是,我有一个似乎无法解决的问题:我需要保留前后标点符号。例如,什么? -> 阿特威?哦!->哦! “你好”->“hellohay”和“你好!” -> “你好!”顺便说一句,这不是重复的,我已经检查了很多猪拉丁问题,但我似乎不知道该怎么做。
到目前为止,这是我的代码(我已经删除了所有标点符号,但不知道如何将其放回原处):
public static String scrub(String s)
{
String punct = ".,?!:;\"(){}[]<>";
String temp = "";
String pigged = "";
int index, index1, index2, index3 = 0;
for(int i = 0; i < s.length(); i++)
{
if(punct.indexOf(s.charAt(i)) == -1) //if s has no punctuation
{
temp+= s.charAt(i);
}
} //temp equals word without punctuation
pigged = pig(temp); //pig is the piglatin-translator method that I have already written,
//didn't want to put it here because it's almost 200 lines
for(int x = 0; x < s.length(); x++)
{
if(s.indexOf(punct)!= -1)//punctuation exists
{
index = x;
}
}
}
我知道理论上你可以在字符串中搜索标点符号并且它应该在开头或结尾附近,所以你必须存储索引并在它“piglatenized”之后替换它,但我一直对它感到困惑for 循环部分。如果你在 for 循环中执行 index = x ,那么每次循环运行时你只是在替换 index 。 帮助将不胜感激!另外,请记住我不能使用快捷方式,我可以使用 String 方法等,但不能使用 Collections 或 ArrayLists 之类的东西(不是你在这里需要它们),基本上我必须重新发明轮子。 顺便说一句,如果不清楚,我已经把翻译成piglatin 的东西记下来了。我只需要在翻译前后保留标点符号。
【问题讨论】:
-
您是否将单个单词或句子传递给此函数?
-
一个字,谢天谢地
-
您是要从单词中间去掉标点符号还是只去掉开头和/或结尾的标点符号?
-
@Lucas Kot-Zaniewski 如果它在英语中位于单词的中间,那么我希望相同的标点符号在 PigLatin 单词中的相同位置。例如,Apple!ple 应该是 Apple!pleway,而 What!应该是Atwhay!感叹号与原来的位置相同。
-
如果是 w!what,应该是 atw!hay 还是 a!twhay?如果你想要第一种方式,那么你可以将标点符号视为辅音簇的一部分,这样你就不必知道位置。
标签: java