Мне нужно написать программу, которая берет строку, и печатает текст строки со всеми удаленными гласными, за исключением случаев, когда начинается слово с ним.Код, который должен печатать строку сканера без гласных
Код, который я написал, находится на полпути, но я не могу понять, почему он не вернет всю строку и не удалит все гласные. Скажем, я вводил фразу «Желаемая область собственности». Программа печатает строку «Dirlp» вместо «Dsrbl prprty ar»
Может ли кто-нибудь посоветовать, как я могу улучшить код, чтобы сделать эту работу? Спасибо!
Вот мой код:
public static void main (String [] args)
{
Scanner in = new Scanner (System.in);
System.out.print ("Enter some text, then hit enter: ");
String text = in.nextLine();
takeOutVowel (text);
System.out.println();
}
static void takeOutVowel (String s)
{
char ch = s.charAt(0); //character to be printed
System.out.print (ch);
int nextCh = 1; //determines the position of the next character
int increase = 1; //increase is how much i will increase by in the for loop; takes the position of vowels into //consideration so they can be skipped
for (int i = 1; i <= s.length(); i += increase)
{
ch = s.charAt (nextCh);
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
{
nextCh++;
ch = s.charAt (nextCh);
while (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u');
{
nextCh++;
ch = s.charAt (nextCh);
if (nextCh >= s.length())
{
ch = ' ';
break;
}
}
}
System.out.print (ch);
nextCh++;
ch = s.charAt (nextCh);
if (ch == ' ') //if the previous position was a space, then this will allow for the vowel to be printed
{
System.out.print ("" + ch + s.charAt(nextCh + 1));
nextCh++;
}
increase = nextCh;
}
Спасибо за все ответы до сих пор - очень полезно! Мне не разрешено использовать массивы или что-то еще не охваченное, поэтому я изменил код на то, что он ниже. Это компилируется нормально, но когда я запускаю программу и введите текст сканера, я получаю сообщение о том,
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 27
at java.lang.String.charAt(String.java:686)
at Vowels.noVowels(Vowels.java:20)
at Vowels.main(Vowels.java:11)
Я не могу понять, в чем проблема сейчас. Еще раз спасибо за помощь!
import java.util.*;
class Vowels
{
public static void main (String [] args)
{
Scanner in = new Scanner (System.in);
System.out.print ("Enter some text, then hit enter: ");
String text = in.nextLine();
System.out.println (noVowels(text));
}
static String noVowels (String s)
{
String noVowels = "" + s.charAt(0); //Starts a new string with the first character of the input text
for (int i = 1; i <= s.length(); i++)
{
if (isVowel(s.charAt(i)) && s.charAt(i-1) != ' ') //if the character is a vowel and it's previous character wasn't a space, then this is a vowel to be replaced
{
noVowels = noVowels.concat("");
}
else
{
noVowels = noVowels.concat("" + s.charAt(i));
}
}
return noVowels;
}
static boolean isVowel (char ch)
{
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
{
return true;
}
else
{
return false;
}
}
}
http://stackoverflow.com/questions/4430112/how-do-i-remove-some-characters-from-my-string (я имею в виду, вы могли бы просто иметь простое регулярное выражение с каждым гласным. ..) – Shiki
Если слово начинается с гласного, вам не нужно удалять какие-либо гласные с этого слова? – Adarsh
Я предполагаю, что ваш индекс выходит за пределы диапазона, потому что в вашем цикле 'for' у вас есть ваше условие как' i <= s.length(); '. Скажем, ваша строка «hello» - длина 5, но 's.charAt (5)' не существует. Максимальное положение в массиве - 4. –