java - 我如何在这个 Pig 拉丁语翻译器中处理标点符号?
问题描述
其余代码运行良好,但我不知道如何防止标点符号被翻译。
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;
}
}
我需要翻译来忽略标点符号。例如“问题?” 应该翻译成“estionquay”?(问号仍在同一位置,未翻译)
解决方案
正如 Andreas 所说,如果函数只需要一个单词,那么调用函数应该负责确保没有完整的句子或标点符号传递给它。话虽如此,如果您需要翻译器来处理这个问题,您需要找到出现标点符号或非字母字符的字符串的索引。我添加了一个 main 方法来测试该功能:
public static void main(String[] args) {
System.out.println(translateWord("QUESTION?"));
}
我在 qu case 中添加了一个循环来查找输入的标点符号,这两个检查是查看 position 处的字符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?