Java替换特殊字符

在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffe r类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的“。”和全角状态下的替换为英文状态下的。

在本例实现过程中主要使用了 StringBuffer 类的字符查找和替换方法,实现代码如下:

 
  1. import java.util.Scanner;
  2. public class Test2()
  3. {
  4. public static void main(String[] args)
  5. {
  6. System.out.println("请输入你要提交的Java文件名称:");
  7. Scanner input=new Scanner(System.in);
  8. String fileName=input.next(); //获取用户输入的 java 文件名称
  9.  
  10. //定义StringBuffer对象,字符串内容为用户输入的java文件名称
  11. StringBuffer file=new StringBuffer(fileName);
  12.  
  13. //获取英文状态下的"."是否存在
  14. int index=file.lastIndexOf(".");
  15.  
  16. //判断中文状态下的"。"和"."是否存在
  17. int errIndex1=file.lastIndexOf("。");
  18. int errIndex2=file.lastIndexOf(".");
  19.  
  20. if(index!=-1&&file.substring(index+1,file.length()).equals("java"))
  21. {
  22. System.out.println("作业提交成功!");
  23. }
  24. else if(errIndex1!=-1&&file.substring(errIndex1+1,file.length()).equals("java"))
  25. {
  26. //将中文状态下的"。"改为英文状态下的"."
  27. file.setCharAt(errIndex1,'.');
  28. System.out.println("你的书写有误,已改正为:"+file+"\r\n提交成功!");
  29. }
  30. else if(errIndex2!=-1&&file.substring(errIndex2+1,file.length()).equals("java"))
  31. {
  32. //将全角状态下的"."改为英文状态下的"."
  33. file.setCharAt(errIndex2,'.');
  34. System.out.println("你的书写有误,已改正为:"+file+"\r\n提交成功!");
  35. }
  36. else
  37. {
  38. System.out.println("你提供的java文件名称有误,请核实!");
  39. }
  40. }
  41. }


运行该程序,当用户录入的 Java 文件名称中的为中文状态的“。”和“.”时,修改为英文状态下的“.”,然后再进行提交,如下所示:

请输入你要提交的Java文件名称:
myexapmle。java
你的书写有误,已改正为:myexample.java


在该程序中,首先定义了一个 String 类型的变量,并赋值为用户输入的 Java 文件名称。 接着使用 StringBuffer 的 StringBuffer(String str) 构造函数将该变量的值作为 StringBuffer 对象的值,然后获取用户输入字符串中(英文和中文)的位置,紧接着使用多重 if 选择语句判断用户输入的字符串中是否包含英文状态下的,并且后面的字符串是否为“java”,如果条件成立,则表示用户输入的信息无误,提交成功;在 else if 中判断用户输入的字符串中是否包含中文状态下的“。”和“.”,并且“。”和后面的字符串为“java”,如果判断通过,则调用 StringBuffer 类中的 setCharAt() 方法修改“。”为“.”,再提交。

### Java 中字符串替换特殊符号的方法 在 Java 编程中,可以通过多种方法实现字符串中特殊符号的替换。以下是几种常见且有效的方式来完成这一任务。 #### 使用 `replaceAll()` 方法 `replaceAll()` 方法允许开发者通过正则表达式定义要匹配和替换的内容。为了移除或替换字符串中的所有特殊字符,可以构建一个适合的正则表达式来识别这些字符,并将其替换为目标值(通常是空字符串或其他替代字符)。下面是一个具体的示例: ```java public class SpecialCharReplacement { public static void main(String[] args) { String input = "Hello@#$%^&*(), World!"; // 定义正则表达式以匹配任何非字母数字字符 String output = input.replaceAll("[^a-zA-Z0-9]", "-"); System.out.println(output); // 输出: Hello----World- } } ``` 在这个例子中,正则表达式 `[^\w]` 被用来匹配所有的非单词字符(即除了字母、数字以外的所有字符),并将它们全部替换为连字符 `-`[^3]。 --- #### 自定义逻辑逐字符检查 如果需要更加精细控制哪些特殊字符替换或者保留下来,则可以创建自定义函数逐一分析每一个字符是否属于目标集合之外的部分进行单独处理: ```java public class CustomSpecialCharRemoval { public static void main(String[] args) { String str = "!@#Hello$%^&*, World?"; char[] chars = str.toCharArray(); StringBuilder sb = new StringBuilder(); for(char c : chars){ if(Character.isLetterOrDigit(c)){ sb.append(c); }else{ sb.append('-'); // 可选地将特殊字符转换成'-' } } System.out.println(sb.toString()); // 结果会把原句里的所有非字母数字符号都变成'-'。 } } ``` 这种方式提供了极大的灵活性,尽管相比直接调用库函数而言稍微复杂一点[^1]。 --- #### 利用预设好的工具包简化流程 Apache Commons Lang 库提供了一个叫做 StringUtils 的实用类,其中包含了众多便捷的功能,其中包括能够轻松执行批量替换的操作。虽然这不是标准 JDK 部分,但在许多企业级项目里广泛使用到此类第三方依赖项可以帮助减少重复劳动量的同时提高代码质量。 首先需引入 Maven 依赖: ```xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> ``` 接着就可以这样做了: ```java import org.apache.commons.lang3.StringUtils; public class ApacheStringUtilsExample { public static void main(String[] args) { String dirtyStr = "User_Input_With_Special_Chars!@#$%"; Set<String> setOfUnwantedChars = new HashSet<>(Arrays.asList("!","@", "#", "$", "%")); String cleanStr = StringUtils.replaceEach(dirtyStr,setOfUnwantedChars.toArray(new String[setOfUnwantedChars.size()]),new String[]{"-", "-", "-", "-", "-"}); System.out.println(cleanStr); } } ``` 这段程序演示了如何利用外部库进一步增强我们的解决方案选项列表长度[^5]。 --- ### 总结 综上所述,有三种主要途径可以在 Java 环境下有效地替换掉给定输入串内的各类特殊标记:一是依靠强大的正则引擎配合内置 API;二是编写循环结构自行解析数据流;三是借助成熟的开源框架扩展能力边界。每种策略都有其独特之处,在不同场合发挥各自的优势。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值