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

元音子串

邹英发
2023-03-14

我必须编写一个程序,将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)

共有2个答案

谢善
2023-03-14

在第一个 for 循环之后,无论如何我都会是 str.length()。当发现可以解决此问题时,您可能希望创建另一个变量来保存 I。

邵崇凛
2023-03-14

一种看待它的方式是你有很多代码来做一件简单的事情,这意味着更多的错误和错误的机会。

这里有一个“更少代码”的解决方案:

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个元音 。我见过完整句子做同样事情的代码。但不是一个字一个字地。 下面是我一直在做的编码 输入将全部。我很难弄清楚这一点。 在运行代码时,我没有得到元音计数。我能把句子分开。但元音计数没有发生。