首页 > 解决方案 > 我如何在这个 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”?(问号仍在同一位置,未翻译)

标签: java

解决方案


正如 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?

推荐阅读