#java #string
Вопрос:
Я писал программу на java на тему, которая,
Write a program to input a sentence which ends only with ! or ? mark. Each word in the
sentence is separated by single blank space. Covert the sentence into lower case and
replace vowels in each word by two characters ahead in ASCII table and consonants by the
next character (i.e. a follows z). Print message for invalid input.
Example Input- computer is fun? output- dqnqwugs kt gwo.
Всякий раз, когда я пытаюсь ввести правильные данные, программа сообщает мне, что это не заканчивается ? или! знак. Я не могу понять, что мне делать. может кто-нибудь мне помочь?
Моя Программа:
package class11;
import java.util.Scanner;
public class Ascii
{
boolean check(String a, String b)
{
return a.endsWith(b);
}
String toascii(String s)
{
String ans="";
if (check(s,"!")==true ||check(s,"?")==true )
{
System.out.println("Ends with ? or !");
s.trim().toLowerCase();
String test = s;
//String lw = test.substring(test.lastIndexOf(" ") 1);
//if(lw=="?"||lw=="!")
{
s.trim().toLowerCase();
int l=s.length();
for(int i=0;i<l;i )
{
if(s.charAt(i)=='a'||s.charAt(i)=='e'||s.charAt(i)=='i'||s.charAt(i)=='o'||s.charAt(i)=='u')
{
char k=(char)(2 (int)(s.charAt(i)));
ans=ans k;
}
else
{
if(s.charAt(i)==' ')
{
ans= ans ' ';
i ;
}
if(s.charAt(i)=='z')
{
ans= ans 'a';
i ;
}
char k=(char)(1 (int)(s.charAt(i)));
ans=ans k;
}
}
}
}
else
{
System.out.println("Not ends with ? or!");
ans="not eligible";
}
return ans;
}
public static void main(String[]args)
{
Ascii ob=new Ascii();
Scanner sc=new Scanner(System.in);
System.out.print("Enter a sentance:");
String a=sc.next();
System.out.println(ob.toascii(a));
sc.close();
}
}
Это то, что я пытаюсь сделать. Но в других программах это работает абсолютно нормально. Я совершенно запутался в этом.
Я пытаюсь дать правильный ввод, но это показывает:
Enter a sentance:computer is fun ?
Not ends with ? or!
not eligible
Process finished with exit code 0
Было бы здорово, если бы кто-нибудь помог мне и предложил лучшую замену.
Комментарии:
1. Подсказка: либо выполните это в отладчике, либо добавьте некоторые записи. Возвращаемое значение
Scanner.next()
— это не то, что вы думаете.2. Также обратите внимание, что простой вызов
s.trim().toLowerCase();
не принесет ничего полезного — ни один из этих методов не изменяет строку, в которой они вызываются… они возвращают новую строку.
Ответ №1:
Я считаю, что ваша проблема заключается в использовании следующего() метода сканера. Это возвращает следующий фрагмент текста, разделенный пробелами. Итак, с вашим примером ввода «компьютер-это весело ?», next() должен возвращать «компьютер».
Попробуйте использовать nextLine() вместо next()
Комментарии:
1. Привет, седобородый, Спасибо за твой ответ, это работает.