有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Replace chars而不使用String Replace()方法

编写一个名为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) 个答案

  1. # 1 楼答案

    我会将字符串的字符流化,并用bs环绕每个元音:

    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());
    
  2. # 2 楼答案

    显然,在(基本上)计算元音时,您不需要创建列表。只需使用整数进行计数(这将得到与构建列表和计算其大小相同的结果),但更容易理解,使用的资源更少。 接下来,分配内存来构建新字符串,如示例代码所示。没关系

    然后填充新字符串。这只需要一个循环。我不明白你对内环的看法

    您需要记住新字符串的索引,这不是循环计数器,因为如果遇到元音,它有时会增加3而不是1。循环遍历未修改的输入字符串。 复制下一个字符,并将索引增加到下一个字符串中1。 如果字符是元音,则在新字符串中添加一个“b”和元音,并将新字符串的索引增加2

    你应该能够根据这个建议精心设计你的代码