Java 这个元音问题怎么了?索引外

Java 这个元音问题怎么了?索引外,java,algorithm,Java,Algorithm,我正在做一项家庭作业,即: 在字符串中查找一个唯一的元音,该元音前面有一个辅音,该辅音前面有一个元音 示例:“eeaaAOEacafu” 结果是:u 我已经做了: 主类 public class Principal { public static void main(String[] args) { // TODO Auto-generated method stub Stream str = new Stream(); str.set

我正在做一项家庭作业,即:

  • 在字符串中查找一个唯一的元音,该元音前面有一个辅音,该辅音前面有一个元音
  • 示例:“eeaaAOEacafu” 结果是:u

    我已经做了:

    主类

    public class Principal {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Stream str = new Stream();
    
            str.setText("eeaaAOEacafu");
            System.out.println(str.returnChar(str.getVowel()));
        }
    
    流类

    public class Stream {
    
        String text;
        char vowel;
    
    public String getText() {
        return texto;
    }
    
    public void setText(String text) {
        this.text = text;
    }
    
    public char getVowel() {
        return vowel;
    }
    
    public void setVowel(char vowel) {
        this.vowel = vowel;
    }
    
    
        public boolean isVowel(String str) {
        str = str.toLowerCase();
        for(int i=0; i<str.length(); i++) {
            char c = str.charAt(i);
            if(c=='a' || c=='e' || c=='i' || c=='o'|| c=='u') {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }
    
    
    public char returnChar(String str) {
        char last;
        char next;
        char result = '0';
        int j=1;
        for(int i=0; i<str.length(); i++) {
            last = str.charAt(i-1);
            next = str.charAt(i+1);
            j++;
            if(!vogal(str.charAt(i))) {
                if(vogal(last) && vogal(next)) {
                    result = next;
                }
            }
        }
        this.setVowel(result);
        return result;
    } }
    
    公共类流{
    字符串文本;
    字符元音;
    公共字符串getText(){
    返回texto;
    }
    公共void setText(字符串文本){
    this.text=文本;
    }
    公共字符元音(){
    返回元音;
    }
    公共无效设置元音(字符元音){
    这个。元音=元音;
    }
    公共布尔IS元音(字符串str){
    str=str.toLowerCase();
    
    对于(int i=0;i使用正则表达式进行测试并定位字符
    [aeiouAEIOU][BCDFGHJKLMNNPQRSTVWXYZBCDFGHJKLMNPQRSTVWXYZ]([aeiouAEIOU])

    使用
    字符串作为一个廉价的映射来跟踪你已经看到的元音。另外,记下你遇到的连续辅音的数量。然后,当你在一个你以前没有看到的元音前面加上一个辅音时,你就找到了答案

    public static void main(String[] args)
    {
        String s = "eeaaAOEacafu".toLowerCase();
    
        int consCount = 0;      
        String seenVowels = "";
    
        for(int i=0; i<s.length(); i++)
        {
            char c = s.charAt(i);
            if("aeiou".indexOf(c) >= 0)
            {
                if(seenVowels.indexOf(c) == -1)
                {
                    if(consCount == 1)
                    {
                        System.out.println("Result: " + c);
                        break;
                    }
                    seenVowels += c;
                }               
                consCount = 0;
            }
            else consCount++;
        }
    }
    
    如果我们将“unique”理解为我们以前从未见过元音,则上述方法有效。如果输入字符串中的元音必须是唯一的,则情况会更复杂一些。现在我们必须跟踪符合原始标准的每个元音,但如果随后遇到同一元音的另一个实例,则删除解决方案。

    下面是一些代码来说明:

    public static void main(String[] args)
    {   
        String s = "afuxekozue".toLowerCase();
    
        int consCount = 0;      
        String seenVowels = "";
        String answer = "";
    
        for(int i=0; i<s.length(); i++)
        {
            char c = s.charAt(i);
            if("aeiou".indexOf(c) >= 0)
            {
                if(seenVowels.indexOf(c) == -1)
                {
                    if(consCount == 1)
                    {
                        answer += c;
                    }
                    seenVowels += c;
                }       
                else if(answer.indexOf(c) >= 0)
                {
                    answer = answer.replaceAll(String.valueOf(c), "");;
                }
    
                consCount = 0;
            }
            else consCount++;
        }
    
        if(answer.length() > 0)
            System.out.println("Result: " + answer.charAt(0));
    }
    

    如果有多个元音满足这个条件,那么我们的输出应该是什么呢(int i=1;i@Rafa,或者您想返回满足条件的第一个元音?@zenwraight满足条件的第一个元音。@MBo谢谢您,我现在将实现它,但正如您所说,有一个唯一的条件。我以前从未使用过正则表达式。正则表达式是Java的API吗?因为我必须在没有API的情况下实现它s、 纯java。只是这个“aca”问题我忽略了这一部分。这可能被认为是一个api,因为你不需要做任何工作,只需要找出所需的模式。使用正则表达式并不能解决“唯一元音”部分。您仍然需要跟踪以前看到的元音。我认为这不起作用。如果字符串是“afuxekoze”
    ,你的代码返回什么?正确答案应该是
    o
    ,但我认为你的代码将返回
    e
    。它返回
    u
    。我认为unique的意思是我们以前没有见过元音。我不认为
    o
    是正确答案,但我可能遗漏了什么。你是对的。我的例子是wrong.
    “afuxekozue”
    ?不清楚“unique”是指我们以前没有见过元音,还是元音在字符串中唯一出现。谢谢Jim。我扩展了原始解决方案来处理unique的“字符串中唯一出现”解释。
    public static void main(String[] args)
    {   
        String s = "afuxekozue".toLowerCase();
    
        int consCount = 0;      
        String seenVowels = "";
        String answer = "";
    
        for(int i=0; i<s.length(); i++)
        {
            char c = s.charAt(i);
            if("aeiou".indexOf(c) >= 0)
            {
                if(seenVowels.indexOf(c) == -1)
                {
                    if(consCount == 1)
                    {
                        answer += c;
                    }
                    seenVowels += c;
                }       
                else if(answer.indexOf(c) >= 0)
                {
                    answer = answer.replaceAll(String.valueOf(c), "");;
                }
    
                consCount = 0;
            }
            else consCount++;
        }
    
        if(answer.length() > 0)
            System.out.println("Result: " + answer.charAt(0));
    }
    
    Result: o