其余的代码可以正常工作,但是我无法弄清楚如何防止标点符号被翻译。
public class PigLatintranslator
{
public static String translateWord (String word)
{
String lowerCaseWord = word.toLowerCase ();
int pos = -1;
char ch;
for (int i = 0 ; i < lowerCaseWord.length () ; i++)
{
ch = lowerCaseWord.charAt (i);
if (isVowel (ch))
{
pos = i;
break;
}
}
if (pos == 0 && lowerCaseWord.length () != 1) //translates if word starts with vowel
{
return lowerCaseWord + "way"; // Adding "way" to the end of string
}
else if (lowerCaseWord.length () == 1) //Ignores words that are only 1 character
{
return lowerCaseWord;
}
else if (lowerCaseWord.charAt(0) == 'q' && lowerCaseWord.charAt(1) == 'u')//words that start with qu
{
String a = lowerCaseWord.substring (2);
return a + "qu" + "ay";
}
else
{
String a = lowerCaseWord.substring (1);
String b = lowerCaseWord.substring (0,1);
return a + b + "ay"; // Adding "ay" at the end of the extracted words after joining them.
}
}
public static boolean isVowel (char ch) checks for vowel
{
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'y')
{
return true;
}
return false;
}
}
我需要翻译才能忽略标点符号。例如“问题?”应该翻译成“ esquaquay”? (问号仍处于相同位置且未翻译)
答案 0 :(得分:0)
正如Andreas所说,如果该函数只期望一个单词,则调用函数应负责确保没有完整的句子或标点传递给该函数。话虽如此,如果您需要翻译器来处理此问题,则需要找到出现标点或非字母字符的字符串的索引。我添加了一个主要方法来测试功能:
public static void main(String[] args) {
System.out.println(translateWord("QUESTION?"));
}
我在qu格中添加了一个循环,以查找要输入的标点符号,这两项检查是查看位置i
处的字符是否在a-z范围内。然后,子字符串只会转到找到标点的地方。
int i;
for (i = 0; i < lowerCaseWord.length(); i++) {
if(lowerCaseWord.charAt(i) > 'z' || lowerCaseWord.charAt(i) < 'a') {
break;
}
}
String a = lowerCaseWord.substring (2, i);
String b = lowerCaseWord.substring(i);
return a + "qu" + "ay" + b;
如果您担心带有连字符和诸如此类的单词,可能需要进行一些调整,但这应该贯穿基本思想。
这是我收到的输出:
$javac PigLatintranslator.java
$java -Xmx128M -Xms16M PigLatintranslator
estionquay?