java - 摆脱字符串中的标点符号
问题描述
我知道在 Java 中有一些速记方法可以解决这个问题,例如
s = s.replaceAll("\\p{Punct}", "");
但是我被指示创建一种方法,可以在不使用这种 ~1 行快捷方式的情况下摆脱标点符号。
这是我迄今为止尝试过的——</p>
private String removePunctuation( String s )
{
//StringBuilder sb = new StringBuilder(s);
String resultString = "";
String punctuations = "!@#$%^&*()~?,.:;\"'";
for(int i = 0; i<s.length()-1; i++)
{
String sub = s.substring(i, i+1);
if(punctuations.indexOf(sub) == -1)
{
//sb.deleteCharAt(i);
resultString += s.substring(i, i+1);
}
}
//String resultString = sb.toString();
return resultString;
}
然而,虽然它运行时没有“错误”,但事实证明我的字符串没有改变,并且仍然包含标点符号。我可能做错了什么?
解决方案
有多种方法可以解决此问题,但您对连续的使用substring
是不正确的(并且是不必要的)。相反,创建一个空StringBuilder
并迭代 input 的每个索引String
。获取该索引处的字符,然后检查它是否不存在于您的集合中punctuations
。假设不是,请将其附加到StringBuilder
. 完成迭代后,返回StringBuilder
a String
。喜欢,
private String removePunctuation(String s) {
StringBuilder sb = new StringBuilder();
String punctuations = "!@#$%^&*()~?,.:;\"'";
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (punctuations.indexOf(ch) < 0) {
sb.append(ch);
}
}
return sb.toString();
}
推荐阅读
- python - 需要从python opencv代码中找出哪个形状大哪个形状小
- react-native - 当withRepeat isFinished时如何设置状态
- latex - 在 Stata 中创建表:创建多行变量标题
- python - Python命名管道在KeyboardInterrupt期间读取堆栈跟踪文件的完整模块代码
- sql-server-2012 - 对于 SQL Server 2012,我将如何创建一个 SQL 报告,其中一个列名更改为另一个表中数据列的值?
- c# - getPixel() 的奇怪交互(可能是异步问题?)
- django - 无法在 DjangoCassandraModel 中对分区进行排序,“仅当分区键受 EQ 或 IN 限制时才支持 ORDER BY。”
- python - 使用 Selenium 和 Python 在网页的特定列中搜索文本
- ms-access - 如何修复 MS-Access 中的错误代码 2001?
- c# - 如何组合多个 Func
在 C# 的 for 循环中动态地