gpt4 book ai didi

java - 不使用 Java Matcher 和 Pattern API 删除特殊字符

转载 作者:行者123 更新时间:2023-12-01 18:02:45 25 4
gpt4 key购买 nike

我正在尝试编写一个java程序。该程序将用户的字符串作为输入,并通过删除其中的特殊字符来显示输出。并在新行中显示每个字符串

假设我有这个字符串 Abc@xyz,2016!horrible_just?kidding 读取此字符串后,我的程序应该通过删除特殊字符(例如

)来显示输出

ABC
xyz
2016年
太可怕了
只是
开玩笑

现在我知道 Java 中已经有可用的 API,例如 MatcherPatterns API 来执行此操作。但我不想使用 API,因为我是 java 初学者,所以我只是想一点一点地破解代码。

这是我到目前为止所尝试过的。我在这里所做的是从用户那里获取字符串并将特殊字符存储在数组中并进行比较直到获得特殊字符。并将新字符存储在 StringBuilder 类中。

这是我的代码

import java.util.*;
class StringTokens{
public void display(String string){
StringBuilder stringToken = new StringBuilder();
stringToken.setLength(0);
char[] str = {' ','!',',','?','.','_','@'};
for(int i=0;i<string.length();i++){
for(int j =0;j<str.length;j++){
if((int)string.charAt(i)!=(int)str[j]){
stringToken.append(str[j]);
}
else {
System.out.println(stringToken.toString());
stringToken.setLength(0);
}
}
}
}
public static void main(String[] args){
if(args.length!=1)
System.out.println("Enter only one line string");
else{
StringTokens st = new StringTokens();
st.display(args[0]);
}
}
}

当我运行此代码时,我只获得特殊字符,而没有获得新行中的每个字符串。

最佳答案

一种简单的方法 - 使用集合来保存所有无效字符:

Set<Character> invalidChars = new HashSet<>(Arrays.asList('$', ...));

那么你的支票归结为:

if(invaidChars.contains(string.charAt(i)) {
... invalid char
} else {
valid char
}

但是,当然,这仍然意味着:您正在重新发明轮子。只有在有充分理由的情况下,人们才会重新发明轮子。一个有效的理由是:您的任务是实现您自己的解决方案。

但除此之外:只需阅读 replaceAll 。该方法的作用与您当前的代码完全相同;我的解决方案就是这样做。但以一种直接的方式;每个优秀的 java 程序员都能够理解!

因此,为了匹配您的问题:是的,您可以自己实现这一点。但下一步是找出问题的“规范”解决方案。当您学习 Java 时,您必须专注于学习如何“像其他人一样”做事,用最少的代码来解决问题。这是 Java 的核心优点之一:对于 99% 的问题,已经有一个直接、高性能、人人都能理解的解决方案;最常见的是直接在 Java 标准库本身中!了解 Java 意味着了解并理解这些解决方案。

每个 C 程序员也可以用 Java 编写 150 行低级数组迭代代码。 真正的美德是知道如何用 5 或 10 行代码完成同样的事情!

关于java - 不使用 Java Matcher 和 Pattern API 删除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39434336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com