编译错误:操作数类型java.lang.String和char不兼容 import java.io.*; 导入hsa.Console; 导入java.awt.*; 公共静态void main(字符串[]args)引发IOException{ c=新控制台(); 串句; 字符串encrypt=“”; 字符串元音=“AEIOUaeiou”; 最后一个字符串punchaution=“,;?!\”\ \/\”-“; StringBuffer RemovePunction=新建StringBuffer(); StringBuffer thirdLetters=新的StringBuffer(); char tempChar; //打开输出文件 打印机输出; 输出=新的PrintWriter(新的FileWriter(“output.txt”); c、 println(“请输入要加密的句子”); 句子=c.readLine(); for(int i=0;i

编译错误:操作数类型java.lang.String和char不兼容 import java.io.*; 导入hsa.Console; 导入java.awt.*; 公共静态void main(字符串[]args)引发IOException{ c=新控制台(); 串句; 字符串encrypt=“”; 字符串元音=“AEIOUaeiou”; 最后一个字符串punchaution=“,;?!\”\ \/\”-“; StringBuffer RemovePunction=新建StringBuffer(); StringBuffer thirdLetters=新的StringBuffer(); char tempChar; //打开输出文件 打印机输出; 输出=新的PrintWriter(新的FileWriter(“output.txt”); c、 println(“请输入要加密的句子”); 句子=c.readLine(); for(int i=0;i,java,drjava,Java,Drjava,我正在尝试删除所有标点符号和空格,并将元音AEIOU更改为!@#$%,但我遇到了一个错误。我还试图输出我从底部句子中替换的元音,并将其反转。正如编译器试图告诉您的,您不能使用=将字符串与字符进行比较。=o运算符对原语(如char)和引用类型(如String)的工作方式不同,因此if(encrypt='U')等条件是无意义的。To,使用。例如,“a”。equals(encrypt)测试字符串encrypt是否为大写字母a 请注意,如上所述,最好将常量字符串放在第一位(而不是encrypt.equa

我正在尝试删除所有标点符号和空格,并将元音AEIOU更改为!@#$%,但我遇到了一个错误。我还试图输出我从底部句子中替换的元音,并将其反转。

正如编译器试图告诉您的,您不能使用
=
将字符串与字符进行比较。
=
o运算符对原语(如
char
)和引用类型(如
String
)的工作方式不同,因此
if(encrypt='U')
等条件是无意义的。

To,使用。例如,
“a”。equals(encrypt)
测试字符串
encrypt
是否为大写字母a

请注意,如上所述,最好将常量字符串放在第一位(而不是
encrypt.equals(“A”)
),以避免出现空指针异常的可能性

如果您想要不区分大小写的匹配,还有


和关于您手头的任务(例如,删除/替换所有事件的发生),您可以考虑使用正则表达式。 例如,要将所有大写字母A替换为!可以使用以下内容:

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());
    }
或者,如果您将反复使用相同的正则表达式模式,或者希望灵活地创建不区分大小写的模式,那么:

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

字符串是对象,而字符是私有数据类型

基本上,你要求计算机做的事情就像要求它将一个数字与一个数字列表进行比较。它不能,因为这是两个完全不同的事情

如下所述,您希望使用

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

要将字符串转换为字符。

那么我可以用什么替换它呢?不确定,因为代码对我来说没有多大意义。鉴于
for
循环的
主体,字符串
加密
可能会超过1个字符。为什么它会恰好是1个字符?您要检查什么?此外,字符串是imm可替换,因此
语句。替换(…)
不会变异
语句
。它会返回一个新字符串,您的代码会丢弃它。正如我所说,代码对我来说没有多大意义。在重新格式化代码时,请注意:您不需要
StringBuffer
,您的
控制台
java.io.Console
冲突,并且
字符串
是免疫的ble,因此调用
语句.replace()
将创建一个新的
字符串,而不是修改现有的字符串。我确实删除了注释。我尝试了他们告诉我的内容,但没有效果。我正在尝试查找用户输入的句子中的任何a,并将其替换为!我该怎么办?
  if(encrypt.equals("a")){