当前位置: 首页 > 知识库问答 >
问题:

字符串Java中的元音计数器被替换

隆兴修
2023-03-14

我想知道如何修复我的元音计数器程序,我已经搜索了许多论坛,但没有任何运气。实验室的描述是“将字符串中的所有元音更改为数字。确保数字范围为 0-9,并在计数时将数字重置为 0

我的主要代码是

public class VowelCounter
{
    public static String getNumberString(String s)
    {
       int counter = 0;
          for(int i = 0; i<s.length(); i++)
          {char g = s.charAt(i);
            if(g =='a') 
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='e')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='i')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='o')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='u')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='A')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='E')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='I')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='O')
            {
                counter++;
                s.replace(g,counter);
            }
            else if(g =='U')
            {
                counter++;
                s.replace(g,counter);
            }  
          }   
       return s;
    }
}

跑步者类是

public class VowelCounterRunner
{
    public static void main ( String[] args )
    {
        System.out.println( VowelCounter.getNumberString("abcdef") );
        System.out.println( VowelCounter.getNumberString("hhhhhhh") );
        System.out.println( VowelCounter.getNumberString("aaaaaaa") );      
        System.out.println( VowelCounter.getNumberString("catpigdatrathogbogfrogmoosegeese") );
        System.out.println( VowelCounter.getNumberString("hhhhhhh1234356HHHHDH") );
        System.out.println( VowelCounter.getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj") );
        System.out.println( VowelCounter.getNumberString("") );
        System.out.println( VowelCounter.getNumberString("x") );
        System.out.println( VowelCounter.getNumberString("e") );

    }
}

我遇到的错误是替换方法。它说“没有找到合适的方法来替换(char,int),方法java.lang.String.replace(char,char)不适用;(参数不匹配;可能从int到char的有损转换)这是我的第一个编程类,所以我真的不知道如何解决这个问题。

共有3个答案

全流觞
2023-03-14

编译错误给了你一个线索(参考替换方法上的javadocs)。您正在尝试使用整数替换字符,您需要做的是将元音替换为数字的字符值,如“1”或“2”等。

另外,在字符串上调用replace将返回字符串的新副本,因此即使您正在调用replace,也无法获得所需的效果。这里有点不同(数组、StringBuffers等)

方斌
2023-03-14

Java String 是不可变的,你没有分配替换的结果(但我更喜欢 StringBuilder,因为它是可变的)。接下来,在我看来,使用开关在这里更容易阅读。就像每个循环一样。把它放在一起,它可能看起来像

public static String getNumberString(String s) {
    if (s == null || s.isEmpty()) {
        return "";
    }
    StringBuilder sb = new StringBuilder(s.length());
    int counter = 0;
    for (char ch : s.toCharArray()) {
        switch (Character.toLowerCase(ch)) {
        case 'a': case 'e': case 'i': case 'o': case 'u':
            sb.append(counter);
            counter++;
            if (counter > 9) {
                counter = 0;
            }
            break;
        default:
            sb.append(ch);
        }
    }
    return sb.toString();
}
黄沈浪
2023-03-14

您正在调用替换为 int 值 - java 不会自动将此 int 转换为字符。您需要将 int 显式转换为人类可读的字符。这是一个快速而肮脏的修复:

更改所有。替换调用

s = s.replace(g,(counter+"").charAt(0));

您将发现代码中仍然存在其他问题,即使替换已修复。应该工作的代码:

s = s.substring(0,i) + counter + s.substring(i);

这不需要int值的显式转换的原因是因为连接运算符()会为您将其转换为文本。

总结:

>

  • 在Java中,类型不是简单地混合-int!=char</code>,必须告诉编译器如何转换

    s.replace 不会导致 s 中的任何内容发生变化,您需要将 s 设置为 s.replace 的结果 - 开始时很难绕开你的头,但你会通过练习得到它

    s.replace 将用相同的东西替换该字符串中字母的所有实例,我认为你不想要

  •  类似资料:
    • 本文向大家介绍替换Java字符串中的子字符串,包括了替换Java字符串中的子字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 我们想将子字符串“ Dead”替换为“ Alive”。为此,让我们使用以下逻辑。在这里,我们使用了while循环,并在其中找到了要替换的子字符串的索引。这样,我们一个接一个地替换了整个子字符串。 以下是替换子字符串的完整示例。 示例 输出结果

    • 问题内容: 我目前有一个包含字符A,B和C的字符串,例如,该字符串看起来像 其他不包含A,B或CI的随机变量想分别用“ A”,“ B”和“ C”替换A,B和C,这是我目前正在做的最好方法: 问题答案: 如果A,B和C是完全相同的单个字符,cletus的答案就可以正常工作,但是如果它们可以是更长的字符串,而您只是出于示例目的将它们称为A,B和C,则cletus的答案就可以。如果它们是更长的字符串,则

    • 我正在编写一个程序,计算用户输入的句子中元音和辅音的数量。我下面的代码计算元音的数量,但它为辅音计数提供了奇怪的数字。例如,如果我输入“g”,我得到的辅音计数是10。

    • 问题内容: 我在做作业时遇到了这个问题(老实说,至少没有试图隐藏它),在解决该问题时遇到了问题。 给定以下声明:字符串短语=“ WazzUp?-谁在第一时间???-IDUNNO”;编写必要的代码以计算字符串中的元音数量,并将适当的消息打印到屏幕上。 这是我到目前为止的代码: 但是,当我运行它时,它只会产生一堆空白行。有人可以帮忙吗? 问题答案: 应该是。 给出的值,然后加1。就像您现在拥有的一样,

    • 主要内容:replace() 方法,replaceFirst() 方法,replaceAll() 方法在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法。 replace() 方法 replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串),其语法格式如下: 其中,oldChar 表示被替换的字符串;newChar 表示用于替换的字符串。repla

    • 我需要将给定字符串中的每个元音替换为同一个元音,后跟字母“v”,再跟上一次元音。例如:<code>bad</code>应该变为<code>bavad</code>,<code>egg</code>变为<code>evegg</code>,<code>doge</code>dovogeve</code>,等等。练习明确指出需要使用<code>String完成。join()方法。到目前为止,我已经想出