根据前面的char有条件地替换char

时间:2018-03-26 16:18:27

标签: java

对于作业,我必须阅读包含电影脚本的文件,并编写一些方法,将某些字符转换为给定其他参数的另一个字符。例如,如果'r'跟随元音(a,e,i,o,u),我试图通过线搜索并将任何'r'转换为'h'。我正在寻找基本的java语法。以下是我阅读文本的主要内容,然后:

package jaws.accent;

import java.io.*;
import java.util.*;

public class JawsAccent {

    public static char convert(Scanner in ) {
        String word = in .nextLine();
        char r = 'r';
        if ((word.contains("a") || word.contains("a") || word.contains("a") || word.contains("a") || word.contains("u"))) {
            r.replace(r, 'h');
        }
        return r;
    }


    public static void main(String[] args)
    throws FileNotFoundException {
        File jaws = new File("JawsScript.txt");
        Scanner input = new Scanner(jaws);
        while (input.hasNextLine()) {
            String line = input.nextLine();
            System.out.println(line);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

有许多方法可以做到这一点。我假设老师打算让你在生成输出的同时逐步浏览一个数据。因此,您可以通过维护布尔值或检查先前的索引来检查前面是否是元音。在这里,我展示了一个简单的for循环,它允许您遍历字符串的每个字符串(让我们假设字符串不包含非BMP代码点):

public class SampleJava {
    public static String transformation(String line) {
        StringBuilder toReturn = new StringBuilder();
        boolean afterVowel = false;
        for(char c : line.toCharArray()) {
            char out = c;
            switch(c) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                afterVowel = true;
                break;
            case 'r':
                if(afterVowel) out = 'h';
                // fall-through
            default:
                afterVowel = false;
            }
            toReturn.append(out);
        }
        return toReturn.toString();
    }
    public static void main(String[] args) throws FileNotFoundException {
        File jaws = new File("JawsScript.txt");
        Scanner input = new Scanner(jaws);
        while (input.hasNextLine()) {
            String line = input.nextLine();
            line = transformation(line);
            System.out.println(line);
        }
    }
}

RegEx版本:

如果教师允许您使用regular expression patterns,则转换代码可能会短得多。但是,除非您学习RegEx文档和示例一段时间,否则您可能很难理解它们的编写方式和工作原理。

public static String transformation(String line) {
    return line.replaceAll("(?<=[aeiou])r", "h");
}

答案 1 :(得分:-1)

String result = Files.readAllLines(Paths.get("a.txt")).stream()
            .map(l -> l.replaceAll("ar","ah"))
            .map(l -> l.replaceAll("er","eh"))
            .map(l -> l.replaceAll("ir","ih"))
            .map(l -> l.replaceAll("or","oh"))
            .map(l -> l.replaceAll("ur","uh"))
            .reduce((e,o) -> e.concat("\n").concat(o))
            .get();

    System.out.println(result);

简单易读的代码。