Java 替换不带字符串的字符Replace()方法

Java 替换不带字符串的字符Replace()方法,java,string,Java,String,编写一个名为game的方法,它接受一个普通单词(参数数据类型:String)并将其转换为B游戏的单词。B-Game的工作原理是在单词的每个元音(a,e,i,o,u)上加上aB 例如: 传递的字符串:与我一起玩 返回的字符串:plabay-wibith-mebe 我的代码: public static void main(String[] args) { String s="play with me"; char[] chars = s.toCharArray(

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

例如:

  • 传递的字符串:
    与我一起玩
  • 返回的字符串:
    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));
            }   
        }


    }
publicstaticvoidmain(字符串[]args){
String s=“与我一起玩”;
char[]chars=s.toCharArray();
ArrayList=新建ArrayList();

对于(int i=0;i我会将字符串的字符流化,并用
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());
Set元音=新的HashSet(Arrays.asList(“a”、“e”、“i”、“o”、“u”));
String s=“与我一起玩”;
字符串结果=
s、 chars()
.mapToObj(c->String.valueOf((char)c))
.map(c->元音。包含(c)?c+“b”+c:c)
.collect(收集器.joining());

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

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

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


你应该能够根据这个建议来编写你的代码。

你的代码没有使用
replace()
-那么你的问题是什么呢?他的代码工作不正确,产生了相当多的混乱。但是你为什么要使用
列表
+
char[]
构建一个
字符串
,而不是像
StringBuilder这样更合适的东西
?正如@GhostCat指出的,您不使用。如果您的代码工作不正常,请添加一个(包括测试用例)并重新表述标题,以反映您正在寻找调试代码的帮助StringBuilder@Abdessamad如果不允许使用
String
的任何方法,则无法查询
char
s
String
的组成部分。因此,该问题无法解决遵守这些约束。优雅,但不允许作为Java101赋值:)