这个程序应该接受一个字符串,检查每个字母是否是一个元音,并将元音变成下划线。例如,如果我输入< 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);
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;
}
}
这很简单。只需遍历给定字符串的每个字符,并用_
替换,以防它是元音。
当心使用字符串
。这在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
。
在您的代码中,问题出在嵌套的“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等的子类。 为什么他们不需要?如果我想创建一个从或类似的类开始,那是不好的设计,还是我将如何去做? 问题答案: 它实际上是好的设计,但并不明显,您想要执行的操作没有效果,因此有点反常。 这些类型的应用程序生活在容器中,因此,它们的切入点由这些容器必须遵守的标准确定。这些标准的设计者选择不将入口点称为主要入口点。您可以将功能放在重写的方法