java - 使用 Java 创建 Ubbi Dubbi 翻译器

标签 java

我在一个入门java类中,对于我的一个程序,我希望创建一个ubbi dubbi翻译器,它在每个元音和元音簇之前添加一个ub。我不知道如何让我的程序正确运行,并且也不确定如何使其排除簇中包含的额外元音。我不允许使用 Stringbuilder..

public void buttonPressed()
    {

    String lowerCase = "";
    String userInput = input.getText();
    Scanner words = new Scanner( userInput );
    String ubbiDubbi = "";
    //Splits up user input by line


    while (words.hasNext()) {
        //Converting to lower case.
        lowerCase = words.next().toLowerCase();
        System.out.println(lowerCase);

    }
    for (int i = 0; i < lowerCase.length(); i++) {
            if (lowerCase.charAt(i+1) == 'a'){
                    ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
             }

                else if (lowerCase.charAt(i+1) == 'e') {
                            ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }


                else if (lowerCase.charAt(i+1) == 'i'){
                                ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }

                else if (lowerCase.charAt(i+1) == 'o'){
                                ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }

                else  if (lowerCase.charAt(i+1) == 'u') {
                                ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }


                 else {
                     ubbiDubbi += lowerCase.charAt(i);

               }   

最佳答案

要使此翻译器正常工作,您基本上只需单步执行输入中的每个字符并将其写入输出即可。此外,如果输入是元音,则需要先写出“ub”,除非前一个字符也是元音。

有一件很方便的事情就是能够识别元音。首先为此编写一个函数是一个好主意。它可能看起来像:

    private boolean isVowel(char c) {
        return
            c == 'a' || c == 'A' ||
            c == 'e' || c == 'E' ||
            c == 'i' || c == 'I' ||
            c == 'o' || c == 'O' ||
            c == 'u' || c == 'U';
    }

现在,如果您查看翻译,我们希望跳过输入中的每个字符并将其写入输出。这可能看起来像这样:

    private String translate(String raw) {
        String translated = ""; 
        for(char c:raw.toCharArray()) {
            // some extra stuff needed here
            translated += c;
        }
        return translated;
    }

对于额外的内容,您需要知道当前字符是否是元音以及前一个字符是否是元音,因此我们可以添加一些内容来做到这一点:

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;  // 

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }

最后在需要时添加“ub”,您可以检查该字符是否是元音以及最后一个字符是否是元音:

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                if(!wasLastCharacterVowel) {
                    translated += "ub";
                }
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }

完成后,您只需要连接按钮按下操作等即可。所以它可能看起来有点像这样:

public class UbbiDubbi {

    private boolean isVowel(char c) {
        return
            c == 'a' || c == 'A' ||
            c == 'e' || c == 'E' ||
            c == 'i' || c == 'I' ||
            c == 'o' || c == 'O' ||
            c == 'u' || c == 'U';
    }

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                if(!wasLastCharacterVowel) {
                    translated += "ub";
                }
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }

    public void buttonPressed() {
        String userInput = "";// = input.getText();
        Scanner words = new Scanner( userInput );
        while (words.hasNext()) {
            String lowerCase = words.next().toLowerCase();
            String translated = translate(lowerCase);
            System.out.println(translated);
        }
        words.close();
    }


    public static void main(String...none) {
        System.out.println(new UbbiDubbi().translate("The quick brown fox jumps over the lazy aadvark"));
    }
}

添加 main 方法提供了一种测试翻译的简单方法。希望这会有所帮助。

关于java - 使用 Java 创建 Ubbi Dubbi 翻译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421701/

相关文章:

java - 试图在 Java 中反转数组

java - 如何使用 Java 准确地重新填充动态表单

java - 从 ComponentColorModel 获取 RGB 分量

java - 添加字符串资源而不是静态数据

java - 用子类型覆盖方法

Java:XMLEncoder writeObject 子对象

java - 更新 SQL 表

java - 系统命令 - Java

java - 升级到 Thymeleaf 3 并在 Spring 中重新实现富 HTML 电子邮件

java - Maven 只选择 src/main/java 或 src/main/scala 作为源文件夹,从不选择两者