2013-05-06 2 views
-1
import java.io.*; 
import hsa.Console; 
import java.awt.*; 


    public static void main(String[] args) throws IOException { 
     c = new Console(); 

     String sentence; 
     String encrypt = ""; 
     String vowels = "AEIOUaeiou"; 
     final String PUNCTAUTION = ".,;?!\"\\/\' -"; 
     StringBuffer removePunctation = new StringBuffer(); 
     StringBuffer thirdLetters = new StringBuffer(); 

     char tempChar; 

     //Open The Output File 

     PrintWriter output; 
     output = new PrintWriter(new FileWriter("output.txt")); 

     c.println("Please enter the sentence you would like to encrypt"); 
     sentence = c.readLine(); 


     for (int i = 0; i < sentence.length(); i++) { 
      tempChar = sentence.charAt(i); 

      if (PUNCTAUTION.indexOf(tempChar) == -1) { 
       encrypt = encrypt + tempChar; 
      } 
     } 
     if (encrypt == 'A') { 
      sentence.replace('A', '!'); 
     } else if (encrypt == 'I') { 
      sentence.replace('I', '#'); 
     } else if (encrypt == 'E') { 
      sentence.replace('E', '@'); 
     } else if (encrypt == 'O') { 
      sentence.replace('O', '$'); 
     } else if (encrypt == 'U') { 
      sentence.replace('U', '%'); 
     } 
     c.println(encrypt.toString().toUpperCase()); 

     output.println(encrypt.toString().toUpperCase()); 
    } 

Я пытаюсь удалить все знаки препинания и пробелы, а также изменить гласные AEIOU на @ # $%, но я получаю сообщение об ошибке!. Я также пытаюсь вывести гласные, которые я заменил из предложения внизу, и отменить их.Ошибка компиляции: Типы операндов Несовместимые java.lang.String и сажу

+0

Несколько общих замечаний при переформатировании кода: вам не нужен 'StringBuffer', ваш' Console' сталкивается с 'java.io.Console', а' String' неизменен, поэтому вызов 'sentence.replace() 'создаст новую' String', а не изменяет существующую. – Makoto

+0

Я действительно удалил комментарий. – greedybuddha

+0

Я попробовал то, что они мне сказали Но ничего не получилось – user2353211

ответ

0

К test strings for equality, используйте String.equals(). Например, "A".equals(encrypt) тестов, если строка encrypt является заглавной буквой А.

Обратите внимание, что, как указано выше, предпочтительно, чтобы поставить постоянную строку первой (вместо encrypt.equals("A")), чтобы исключить возможность исключения нулевого указателя.

Если вы хотите нечувствительность к регистру, то есть также String.equalsIgnoreCase().


А что касается вашей задачи под рукой (например, удалить/заменить все вхождения чего-то), вы могли бы рассмотреть возможность использования регулярных выражений вместо этого.

Например, чтобы заменить всю прописную букву A на! вы могли бы использовать что-то вроде:

encrypt.replaceAll("A", "!") 

Или, если вы будете использовать один и тот же шаблон регулярного выражения снова и снова или хотите гибкость сделать шаблоны регистронезависимых, то:

Pattern a = Pattern.compile("A", Pattern.CASE_INSENSITIVE); 
... 
a.matcher(encrypt).replaceAll("!"); 
+0

Я пытаюсь найти любые A в моем предложении, введенные пользователем и заменяющие его! что я делаю? – user2353211

0

Как компилятор пытается рассказать вам, вы не можете использовать == для сравнения строки с символом. Оператор == работает по-разному для примитивов (например, char) и ссылочных типов (например, String), поэтому такие условия, как if(encrypt == 'U'), являются бессмысленными.

+0

Тогда что я могу заменить? – user2353211

+0

Не уверен, потому что код для меня не имеет большого смысла. Строка 'encrypt' предположительно заканчивается длиннее 1 символа, учитывая тело цикла' for'. Почему это должно быть ровно 1 персонаж? Что вы пытаетесь проверить? Кроме того, строки неизменяемы, поэтому 'предложение.replace (...)' не мутирует 'предложение'. Он возвращает новую строку, которую ваш код отбрасывает. Как я уже сказал, код не имеет для меня никакого смысла. –

0

Строка - это объект, в то время как char - это частный тип данных.

Что вы в основном просите, чтобы компьютер сделал это, так это попросить его сравнить число с списком чисел. Это не может быть просто потому, что это две совершенно разные вещи.

Как указано ниже, вы хотите использовать что-то вроде

if(encrypt.equals("a")){ 

на campare строку в символ.