替换没有String replace()方法的字符

时间:2017-12-21 13:44:17

标签: java string

编写一个名为game的方法,该方法采用普通单词(参数数据类型:String)并将其转换为B游戏的单词。 B-Game的工作原理是在一个单词的每个元音(a,e,i,o,u)中添加b加上声音重复。

示例:

  • 传递了字符串:play with me
  • 返回字符串:plabay wibith mebe

我的代码:

public static void main(String[] args) {
        String s="play with me";
        char[] chars = s.toCharArray();
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<chars.length;i++) {
            if(chars[i]=='i' || chars[i]=='e' || chars[i]=='a' || chars[i]=='u' || chars[i]=='o' ) {
                list.add(i); // add position to list
            }
        }
        int size=chars.length+(list.size()*2);
        char [] charsNew= new char[size];

        for(int i=0;i<charsNew.length;i++) {
            for(int f=0;f<chars.length;f++) {

                charsNew[i]=chars[f];

            System.out.println(java.util.Arrays.toString(charsNew));
            }   
        }


    }

如何在不使用replace()的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

我会对字符串中的字符进行流式处理,并使用b s围绕每个元音:

Set<String> vowels = new HashSet<>(Arrays.asList("a", "e", "i", "o", "u"));

String s = "play with me";

String result =
    s.chars()
     .mapToObj(c -> String.valueOf((char) c))
     .map(c -> vowels.contains(c) ? c + "b" + c : c)
     .collect(Collectors.joining());

答案 1 :(得分:1)

显然你不需要你(基本上)计算元音时建立的列表。只需使用整数计算它们(这将获得与构建列表和计算其大小相同的结果),但更容易理解并使用更少的资源。 接下来分配内存来构建新字符串,如示例代码中所示。那很好。

然后填写新字符串。这只需要一个循环。我不了解内循环的想法。

你需要记住新字符串的索引,这不是循环计数器,因为如果遇到元音,有时会增加3而不是1。循环遍历未修改的输入字符串。 复制下一个字符并将索引增加到下一个字符串1。 如果角色已被元音另外添加&#39; b&#39;和新字符串的元音,并将索引增加到2。

您应该能够根据此建议制作代码。