我有一项任务,我必须使用用户输入的名称并将元音转换为星号。我在下面的代码中有一部分(正如你在下面的代码中看到的那样),但还有另一部分:如果输入的字符串具有偶数字符,则第一个字符串之间应该有两个而不是一个空格和姓氏。如果它很奇怪,它应该只有一个。我试图用if-else语句实现它,但它无法正常工作。
帮助将不胜感激。谢谢。
import java.util.*;
import java.io.*; // necessary for user input
public class Prog510a
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter your name: ");
String word = input.nextLine();
int length = word.length();
String space = "";
for(int count = 0; count < word.length(); count ++)
{
char c = word.charAt(count);
if(c == 'a' || c == 'A' || c == 'e' || c == 'E' || c == 'i' || c == 'I' || c == 'o' || c == 'O'
|| c == 'u' || c == 'U')
{
String front = word.substring(0, count);
String back = word.substring(count + 1);
word = front + "*" + back;
}
}
if (length % 2 == 0)
{
space = " ";
}
else
{
space = " ";
}
System.out.println(word);
}
}
答案 0 :(得分:2)
好吧,您可能希望先将全名拆分为姓氏和名字。这可以使用split
函数来完成,该函数返回一个String数组:
string[] firstAndLastNames = word.split(" ");
这当然可以在你更换元音之后完成,但不一定是这样。
然后你只需得到全名的长度,并适当地分配给space
变量:
if ((firstAndLastNames[0].length() + firstAndLastNames[1].length()) % 2 == 0)
space = " ";
else
space = " ";
然后在输出时,执行以下操作:
System.out.println(firstAndLastNames[0] + space + firstAndLastNames[1]);
我还建议用星号替换元音的更好方法,因为它非常混乱。创建一个元音数组可能会更好,并使用equalsIgnoreCase
函数替换:
string[] vowels = {"a","e","i","o","u"};
for (int i = 0; i < vowels.length; i++}
for (int j = 0; j < word.length; j++)
if (word[j].equalsIgnoreCase(vowel[i]))
word[j] = "*";
由于您尚未学习数组,因此您可以使用字符串replace
函数将空格替换为一个或两个空格,具体取决于长度,如:
if (word.length() % 2 == 0)
word = word.replace(" "," ");
你不需要检查它是否奇怪,因为它已经有1个空格,这就是你想要的。
答案 1 :(得分:2)
这是一个较短的版本:
public class NameVowelsToAsterisks{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter your name: ");
String word = input.nextLine();
String astWord = word.replaceAll("[AEIOUYaeiouy]", "*"); //changing to asterisks
String spaceWord = new String();
if (astWord.length() % 2 == 0) {
int spacePos = astWord.indexOf(' '); //finding position of space
spaceWord = new StringBuilder(astWord).insert(spacePos, " ").toString(); //adding space if needed
} else spaceWord = astWord;
System.out.println(spaceWord); //printing result
}
答案 2 :(得分:1)
首先我认为你应该使用替换而不是使用那个大丑陋的循环。
教程:java string replace example
文档:java api:在这一篇中查找方法replace,replaceAll,replaceFirst
希望这有帮助