如何在不使用循环的情况下搜索字符串中的字符?
How can I search for a character in strings without using a loop?
我的任务是:如果用户输入的单词没有元音,则在末尾添加 "ay",如果以元音开头,则在末尾添加 "yay",否则如果它不满足这些条件中的任何一个,那么第一个字母将被移动到单词的末尾并且 "ay" 被添加到末尾。我似乎无法让最后一个条件起作用。例如单词 "sad" 应该输出 "adsay" 但它输出 "saday" 这意味着它正在读取并接受另一个 if 语句。我试图查找一些解决方案,但我得到的只是循环,我想避免这个特定任务的循环。这是我的代码:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Word: ");
String word = in.nextLine();
int length = word.length();
String word1 = "";
if (word.charAt(0) == 'a' || word.charAt(0) == 'e' || word.charAt(0) == 'i' || word.charAt(0) == 'o' || word.charAt(0) == 'u')
{
word1 = pigLatin(word);
System.out.println("Pig Latin: " + word1);
}
else if (word.indexOf("a") == -1 || word.indexOf("e") == -1 || word.indexOf("i") == -1 || word.indexOf("o") == -1 || word.indexOf("u") == -1)
{
word1 = pigLatin1(word);
System.out.println("Pig Latin: " + word1);
}
else
{
word1 = pigLatin2(word);
System.out.println("Pig Latin: " + word1);
}
}
static String pigLatin(String word)
{
String x = word + "yay";
return x;
}
static String pigLatin1(String word)
{
String x = word + "ay";
return x;
}
static String pigLatin2(String word)
{
char firstLetter = word.charAt(0);
String x = word.substring(1, word.length()) + firstLetter + "ay";
return x;
}
}
问题出在你的第二个if
语句:
else if (word.indexOf("a") == -1 || word.indexOf("e") == -1 || word.indexOf("i") == -1 || word.indexOf("o") == -1 || word.indexOf("u") == -1)
{
word1 = pigLatin1(word);
System.out.println("Pig Latin: " + word1);
}
因为你在这里使用了"or"(||
运算符),所以只要单词不包含"a",[=24],你的程序就会进入这个块=]或不包含"e"等。对于您的测试输入,"sad"包含"a"但不包含"e"...所以你最后打电话给 pigLatin1("sad")
.
将此 if
改为使用 "and"(&&
运算符)。这样一来,单词就不需要包含每个已定义的元音,而不是至少没有一个已定义的元音。
else if (word.indexOf("a") == -1 && word.indexOf("e") == -1 && word.indexOf("i") == -1 && word.indexOf("o") == -1 && word.indexOf("u") == -1)
我的任务是:如果用户输入的单词没有元音,则在末尾添加 "ay",如果以元音开头,则在末尾添加 "yay",否则如果它不满足这些条件中的任何一个,那么第一个字母将被移动到单词的末尾并且 "ay" 被添加到末尾。我似乎无法让最后一个条件起作用。例如单词 "sad" 应该输出 "adsay" 但它输出 "saday" 这意味着它正在读取并接受另一个 if 语句。我试图查找一些解决方案,但我得到的只是循环,我想避免这个特定任务的循环。这是我的代码:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Word: ");
String word = in.nextLine();
int length = word.length();
String word1 = "";
if (word.charAt(0) == 'a' || word.charAt(0) == 'e' || word.charAt(0) == 'i' || word.charAt(0) == 'o' || word.charAt(0) == 'u')
{
word1 = pigLatin(word);
System.out.println("Pig Latin: " + word1);
}
else if (word.indexOf("a") == -1 || word.indexOf("e") == -1 || word.indexOf("i") == -1 || word.indexOf("o") == -1 || word.indexOf("u") == -1)
{
word1 = pigLatin1(word);
System.out.println("Pig Latin: " + word1);
}
else
{
word1 = pigLatin2(word);
System.out.println("Pig Latin: " + word1);
}
}
static String pigLatin(String word)
{
String x = word + "yay";
return x;
}
static String pigLatin1(String word)
{
String x = word + "ay";
return x;
}
static String pigLatin2(String word)
{
char firstLetter = word.charAt(0);
String x = word.substring(1, word.length()) + firstLetter + "ay";
return x;
}
}
问题出在你的第二个if
语句:
else if (word.indexOf("a") == -1 || word.indexOf("e") == -1 || word.indexOf("i") == -1 || word.indexOf("o") == -1 || word.indexOf("u") == -1) { word1 = pigLatin1(word); System.out.println("Pig Latin: " + word1); }
因为你在这里使用了"or"(||
运算符),所以只要单词不包含"a",[=24],你的程序就会进入这个块=]或不包含"e"等。对于您的测试输入,"sad"包含"a"但不包含"e"...所以你最后打电话给 pigLatin1("sad")
.
将此 if
改为使用 "and"(&&
运算符)。这样一来,单词就不需要包含每个已定义的元音,而不是至少没有一个已定义的元音。
else if (word.indexOf("a") == -1 && word.indexOf("e") == -1 && word.indexOf("i") == -1 && word.indexOf("o") == -1 && word.indexOf("u") == -1)