我必须编写一个程序,将String作为用户输入,然后打印一个子字符串,该子字符串以String的第一个元音开始,以最后一个元音结束。例如,如果我的字符串是:“Hi I have a dog name Patch”,那么打印的子字符串将是:“I I have an dog name Pa”
这是我现在拥有的代码:
import java.util.Scanner;
import java.util.*;
public class SousChaineVoyelle {
private static Scanner sc;
public static void main (String[] args) {
sc = new Scanner(System.in);
System.out.print("Enter a String: ");
String str = sc.nextLine();
int pos1 = 0;
int pos2 = 0;
int i;
int j;
boolean isVowel1 = false;
boolean isVowel2 = false;
for (i = 0; i < str.length(); i++){
if (str.charAt(i) == 'A' || str.charAt(i) == 'a' ||
chaine.charAt(i) == 'E' || str.charAt(i) == 'e' ||
str.charAt(i) == 'I' || str.charAt(i) == 'i' ||
str.charAt(i) == 'O' || str.charAt(i) == 'o' ||
str.charAt(i) == 'U' || str.charAt(i) == 'u' ||
str.charAt(i) == 'Y' || str.charAt(i) == 'y'){
isVowel1 = true;
break;
}
}
if (isVowel1){
pos1 = str.charAt(i);
}
for (j = str.length() - 1; j > i; j--){
if (str.charAt(j) == 'A' || str.charAt(j) == 'a' ||
str.charAt(j) == 'E' || str.charAt(j) == 'e' ||
str.charAt(j) == 'I' || str.charAt(j) == 'i' ||
str.charAt(j) == 'O' || str.charAt(j) == 'o' ||
str.charAt(j) == 'U' || str.charAt(j) == 'u' ||
str.charAt(j) == 'Y' || str.charAt(j) == 'y'){
isVowel2 = true;
break;
}
}
if (isVowel2){
pos2 = str.charAt(j);
}
String sub = chaine.substring(pos1, pos2);
System.out.print(The substring from the first vowel to the last is "\"" + sub +"\"");
}
}
this got me this:
线程 “main” 中的异常 java.lang.StringIndexOutOfBoundsException: 索引 22 超出长度 22 的界限长度 22 at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55) at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52) at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213) at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210) at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302) at java.base/java.lang.String.checkIndex(String.java:4557) at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46) at java.base/java.lang.String.charAt(String.java:1515) at SousChaineVoyelle.main(SousChaineVoyelle.java:33)
在第一个 for 循环之后,无论如何我都会是 str.length()。当发现可以解决此问题时,您可能希望创建另一个变量来保存 I。
一种看待它的方式是你有很多代码来做一件简单的事情,这意味着更多的错误和错误的机会。
这里有一个“更少代码”的解决方案:
str = str.replaceAll("(?i)^[^aeiou]*|[^aeiou]*$", "");
查看现场演示。
其工作原理是匹配所有前导和尾随的非元音字母(如果有的话),然后用nothing替换它们,有效地删除它们。< br> (?i)
使匹配不区分大小写。
我做了一个程序来计算输入字符串中元音和辅音的数量: 当“y”本身是辅音时,它应该是元音。我在哪里陈述?
在循环结束时,我计划显示句子中辅音和元音的数量。我想知道是否有更有效的方法来检查给定句子中有多少辅音和元音,而不是使用if语句手动输入每个字母。(key指的是我已经初始化的扫描仪) 编辑:它需要忽略数字和其他特殊字符,例如,如果我写你好@你好吗?。应该有8个元音和6个辅音。
我已经开始了一个计算元音的程序,似乎毫无进展。我需要从字符串中计数元音,然后显示元音。我需要通过在变量中存储出现次数来做到这一点。像这样: 当前代码(没有那么多): 我自己尝试了很多方法,但似乎都没有成功。
给定一个句子,我希望能够数出每个单词中有多少个元音。 示例输入: 示例输出: 我最初的想法是有2个同时循环。第一个循环直到满足EOF以结束程序,第二个(嵌套的)同时循环将运行直到满足空格 (" ") ,同时还对当前单词中的元音求和。一旦遇到空格,它将打印出元音的当前值,第二个同时循环将结束并重新开始(元音计数器重置回0)。 这是我为此编写的代码: 然而,这导致语法错误,我不能找出我的错误。 第6行
问题内容: 我在这里犯了什么愚蠢的错误,使我无法确定用户输入的第一个字母是辅音?不管我输入什么,它都可以确定第一个字母是元音。 问题答案: 更改: 至: 总是因为它被评估为 ,因为非空字符串始终为True,因此将其评估为True。
我一直在试图弄清楚如何计算句子每个单词中的元音和字符。例如 在句子 < code>hello : 5个字符,2个元音 <代码>有:5个字符,2个元音 。我见过完整句子做同样事情的代码。但不是一个字一个字地。 下面是我一直在做的编码 输入将全部。我很难弄清楚这一点。 在运行代码时,我没有得到元音计数。我能把句子分开。但元音计数没有发生。