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

小程序中输出不正确。为什么这个String变量没有按照我的要求去做?

解河
2023-03-14

这个程序应该接受一个字符串,检查每个字母是否是一个元音,并将元音变成下划线。例如,如果我输入< code>some,它应该输出< code>s_m_。这是一个简单的编程练习,我觉得我应该能够做到。然而,我真的被难住了,不知道我做错了什么。

我声明了一个保留元音的数组,一个包含更新字符串的newStr变量,我循环遍历字符串,使用charAt()比较每个字母,以检查它是否在元音数组中。如果是,我会在更新的字符串中添加_,如果不是,我会保留原始字母。最终输出错误,我做错了什么?

char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
String newStr = "";

for (int x = 0; x < str.length(); x++) {
    char letter = str.charAt(x);

    for (int j = 0; j < vowels.length; j++) {
        if (letter == vowels[j]) {
            newStr = newStr + '_';
            break;
        } else {
            newStr = newStr + letter;
            break;
        }
    }
}

out.println(newStr);

共有3个答案

祁承望
2023-03-14
for (int x = 0; x < str.length(); x++) {
 char letter = str.charAt(x);
 boolean toReplace = false;
 for (int j = 0; j < vowels.length; j++) {
    if (letter == vowels[j]) {
        toReplace = true;
        break;
    }
 }
 if (toReplace) {
    newStr = newStr + "_";
 } else {
    newStr = newStr + letter;
 }
}
慕容聪
2023-03-14

这很简单。只需遍历给定字符串的每个字符,并用_替换,以防它是元音。

当心使用字符串。这在java中是不可变的,因此要构建最终字符串,您应该使用StringBuilder

public static String replaceVowel(String str) {
    final IntPredicate isVowel = ch -> ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
    StringBuilder buf = new StringBuilder(str.length());

    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        boolean vowel = isVowel.test(Character.toLowerCase(ch));
        buf.append(vowel ? '_' : ch);
    }

    return buf.toString();
}

作为替代方案,您可以将正则表达式与String类的replace eAll()方法一起使用。

private static final Pattern VOWEL = Pattern.compile("[aeiou]");

public static String replaceVowel(String str) {
    return VOWEL.matcher(str).replaceAll("_");
}

这也是正确的,因为在后台,replaceAll()使用StringBUuilder

皇甫卓君
2023-03-14

在您的代码中,问题出在嵌套的“for-loop”中。我用引号将它括起来,因为它实际上从不循环。第一次迭代< code>j=0会立即中断循环,因为您的字母要么等于< code > a with < code >(letter = =元音[0]),要么不等于。在这两种情况下,您都要执行< code > break并添加字符。这意味着您的循环可以简化为一个简单的< code>if-else,它检查字母是否是< code>a,并用< code>_替换它或保留它。

要解决此问题,您需要使用不同的方法。您可以创建一个元音字符串,例如“aeiouAEIOU”,并使用indexOf测试所选字符是否为元音。

public static String omitVowels(String input) {
    StringBuilder out = new StringBuilder(input.length());
    String vowels = "aeiouAEIOU";
    for (int i = 0; i < input.length(); i++) {
        char c = input.charAt(i);
        if (vowels.indexOf(c) >= 0) // is vowel if index not negative
            out.append('_');
        else
            out.append(c);
    }
    return out.toString();
}

indexOf(char)将返回-1如果提供的字符不是字符串的一部分,否则将返回特定的索引。我们可以使用此属性来测试字符是否是元音。

例子

< code > omitVowels(" hello world ")-

< code > omitVowels(" aeiou ")-

省略元音(“测试”) -

 类似资料:
  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG

  • 我确定正则本身是没问题的,因为别的文本都正常去掉了标签,但就这个文本(我省略了很多)去不掉标签 我怀疑字符串中的 < 和 > 不对,但是不知道啥问题啊

  • 我尝试了一切,但图像不会显示出来,我试图使图像变小但没有用,我试图改变路径,我试图改变图像的位置但没有帮助,我试图在互联网上搜索但一无所获。 我看到的只是空白的图形用户界面,没有文本和图像。如果你能帮我,你会帮我一个大忙。 代码如下:

  • 我需要写一个代码:一个素数是一个大于1的正整数,它只能被它自己和1整除。您要编写一个程序,反复向用户询问一个整数值,然后显示小于或等于该数字的所有质数。 功能需求 我的代码是: 有人能帮我找出我做错了什么吗?

  • 我以个人身份申请了一个微信小程序,在:基础功能 > 订阅消息 > 公共模板库 > 长期订阅 显示没有可用模板。是什么原因导致我没有长期订阅的可用模板?是企业认证才有的吗?还有个疑问是不是小程序推送的模板消息在用户微信上是显示在“服务通知”中,所有小程序的通知都被集中在这里,有没有方法可以单独显示一个小程序的通知(就像服务号一样)

  • 问题内容: 这适用于Applet,Servlet,Midlet等的子类。 为什么他们不需要?如果我想创建一个从或类似的类开始,那是不好的设计,还是我将如何去做? 问题答案: 它实际上是好的设计,但并不明显,您想要执行的操作没有效果,因此有点反常。 这些类型的应用程序生活在容器中,因此,它们的切入点由这些容器必须遵守的标准确定。这些标准的设计者选择不将入口点称为主要入口点。您可以将功能放在重写的方法