我对Java很陌生,我正在为学校编写一个小的加密、解密工具,我想问一下如何才能将特殊字符排除在外,我已经尝试过 "包含 "这样的方法,但我并没有真正的工作,我的代码看起来像这样。
public void bEncode_ActionPerformed(ActionEvent evt) {
String Input = jTextField1.getText();
String Output = "";
String Specialcharacters = "!§$%&/()=?.,-_+*:;";
jTextField2.setText("Encoding...");
char c;
int Number = (Integer) jSpinner1Model.getNumber();
int asc;
for (int i = 0; i < Input.length(); i++) {
if(!Input.contains(Specialcharacters){
c = Input.charAt(i);
asc = (int) c;
asc = asc + Number;
if (asc>90) asc = asc-26;
Output = Output + (char) asc;
} else {
}
}
jTextField2.setText(Output);
}
有什么方法可以让它工作吗?
使用正则表达式。 例如,下面这行将只从给定的字符串中提取字母和数字。
String onlyLettersAndNumbers = s.replaceAll("[^0-9A-Za-z]", "");
如果你只需要保留字母和数字,你可以使用如下的正则表达式来简化你的代码。
public void bEncode_ActionPerformed(ActionEvent evt) {
String input = jTextField1.getText();
jTextField2.setText("Encoding...");
int Number = (Integer) jSpinner1Model.getNumber();
jTextField2.setText(input.replaceAll("[\\W^_]", ""));
}
快速演示
public class Main {
public static void main(String[] args) {
String regex = "[\\W^_]";
System.out.println("Hello123".replaceAll(regex, ""));
System.out.println("Hello .123".replaceAll(regex, ""));
System.out.println("Hello&*@123".replaceAll(regex, ""));
System.out.println("Hello!§$%&/()=?.,-_+*:; @123".replaceAll(regex, ""));
}
}
输出:
Hello123
Hello123
Hello123
Hello123
附带说一句你应该始终遵循 Java命名惯例 如 Input
应命名为 input
.