如何在字符串中找到第一个元音的索引?

时间:2015-07-17 18:49:28

标签: java string indexing char

这部分我想实施,但不知道如何: 在Pig Latin中,直到第一个元音的所有辅音都应移到单词的末尾。因此,虽然“笔记本电脑”仍然是“aptoplay”,但“string”应该变成“ingStray”。

我有这个,第一部分工作正常。

public static String doStuff(String word) {
    int number = 0;
    char[] vowel = { 'a', 'e', 'i', 'o', 'u' };
    char first = word.charAt(0);
    char second = Character.toLowerCase(first);
    if (second == 'a' || second == 'e' || second == 'i' || 
            second == 'o' || second == 'u') {
        word = word + "ay";
    } else {
        for (int i = 0; i < word.length(); i++) {
        for (int j = 0; j < 5; j++) {
            if (word.charAt(i) == vowel[j]) {
                word = word.substring(i + 1) + word.substring(i) + "ay";
                break;
            }
        }
    }
    return word;
}

6 个答案:

答案 0 :(得分:4)

首先,您的break应该突破两个循环。为此,请在第一个循环之前添加一个标记,如

outerloop:
for (int i = 0; i < word.length(); i++) {

然后代替break;break outerloop;

第二,

word = word.substring(i + 1) + word.substring(i) + "ay";

不起作用,因为当您找到元音时,您希望将其保留在前面,因此i + 1应该只是i。然后,“ay”之前的其余子字符串应该是开头的辅音,因此0, i而不仅仅是i。总之,这给出了

outerloop:
    for (int i = 0; i < word.length(); i++) {
        for (int j = 0; j < 5; j++) {
            if (word.charAt(i) == vowel[j]) {
                word = word.substring(i) + word.substring(0, i) + "ay";
                break outerloop;
            }
        }
    }

答案 1 :(得分:2)

只需走一下String直到你碰到第一个元音,这将为你提供String.substring()所需的索引值

只需将您的doStuff()方法改为:

public static void main(String[] args) throws Exception {
    System.out.println(doStuff("laptop"));
    System.out.println(doStuff("String"));
    System.out.println(doStuff("apple"));
}

public static String doStuff(String word) {
    String vowels = "aeiouAEIOU";
    for (int i = 0; i < word.length(); i++) {
        if (vowels.contains(""+word.charAt(i))) {
            String prefix = word.substring(0, i);
            String suffix = word.substring(i);
            word = suffix + prefix + "ay";
            break;
        }
    }
    return word;
}

结果:

aptoplay
ingStray
appleay

答案 2 :(得分:1)

检查字符串的长度,检查“aeiou”是否是分割点处的字符之一。如果是,请相应地重新连接字符串,否则继续下一个字符。

String doStuff(string a)
{
    char c;
    string s = "aeiou" //y?
    int i,l;
    l=a.length();
    for(i = 0;i < l;i++)
    {   
        c=a.charAt(i);
        if(s.contains(c))
        break;
    }
    a=a.substring(i,l)+a.substring(0,i)+"ay";
    return a;
}

答案 3 :(得分:1)

我是新来的,所以不太了解这些惯例。无论如何,下面的代码应该能够帮助您实现所需的转换。

使用元音列表为您提供'包含'操作,与嵌套循环相比,它允许更容易理解代码。但是在处理方面没有优势。

在以下代码中,inp是输入字符串。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class piglatin {
    public static void main(String args[]) {
        String[] vowels = new String[] { "A", "a", "E", "e", "I", "i", "O",
                "o", "U", "u" };
        List<String> vowelList = new ArrayList<String>(Arrays.asList(vowels));
        String inp = "string";
        String returnString = inp;
        for (int i = 0; i < inp.length(); i++) {
            if(vowelList.contains(""+inp.charAt(i))){
                returnString = inp.substring(i)+inp.substring(0,i)+"ay";
                break;
            }
        }
        System.out.println(returnString);
    }

}

编辑:没有意识到“.contains”可以与Strings一起使用,也可以由Shar1er80使用。现在不是关于学习的堆栈交换;)

答案 4 :(得分:0)

public static String pigLatin(String origianl){
            List<Character> vowels = new ArrayList<>(5);
            vowels.add('a');
            vowels.add('e');
            vowels.add('i');
            vowels.add('o');
            vowels.add('u');
            boolean vowelFound;
            for(int i = 0; i < origianl.length(); i++){
                if(vowels.contains(origianl.toLowerCase().charAt(i))){
                    String post = origianl.substring(0, i);
                    String pre = origianl.substring(i);
                    return pre + post + "ay";
                }
            }
            return null;
        }

您不必使用该列表。还有很多其他选项(比如在||语句中使用一堆if)。此外,最好将List置于方法之外,以便在每次调用方法时都不需要创建它。

答案 5 :(得分:0)

char[] ar = new char[] { 'u', 'o', 'i', 'e', 'a' };
        string Word = "Hello";
        int count=0;       
        for (int i = 0; i < Name.Length; i++)
        {
            for (int j = 0; j < ar.Length; j++)
            {
                if (Word[i] == ar[j])
                {
                    count++;
                    Console.WriteLine("{0},{1}",Word[i], i);
                    break;
                }
            }
            if (count==1)
            {

                break;
            }