java - 如何过滤字符串以仅包含允许的字符?
问题描述
我正在尝试过滤字符串以仅包含我允许的字符。例如,假设我允许字母 [AZ](不区分大小写)和下划线('_')。
所以假设我有字符串:
"I am a happy_bear and I sk@8 because it's gr8"
我希望它被过滤为:
"I am a happy_bear and I sk because its gr"
到目前为止我已经尝试过:
//Define a method to check allowed charachters
private boolean checkAllowed(Character ch) {
return Character.isLetter(ch) || ch == '_';
}
// loop through string
for (int i = 0; i < someString.length(); i++) {
if (this.checkAllowed(someString.charAt(i)) {
// append to a list
}
}
如何过滤字符串以仅包含我允许的字符?这可以通过类似流的过滤来实现吗?如果没有正则表达式,这可以更容易完成吗?(我正在寻找更好的方法来做到这一点)
解决方案
这可以通过类似流的过滤来实现吗?
是的:
String s = "I am a happy_bear and I sk@8 because it's gr8";
String d = s.codePoints()
.filter(c -> Character.isLetter(c) || c == '_' || c == ' ')
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
System.out.println(d);
...
I am a happy_bear and I sk because its gr
来自此序列的 Unicode 代码点的 IntStream
然后使用过滤和收集StringBuilder
流。
不过,正则表达式解决方案可能更简洁明了,请看replaceAll() method
.
您的循环和“检查方法”也很好,只需使用 aStringBuilder
创建一个仅包含“通过”检查的字符的新字符串。
推荐阅读
- r - 将R中的余弦距离函数转换为Rcpp
- python - Visual Studio 14 的离线安装程序,用于 pyodbc 包/离线 pyodbc 安装
- node.js - 在 Express 中使用中间件导致 404
- ruby-on-rails - 具有嵌套属性的模型在不是模型中的属性的字段中不显示 fields_for
- swift - Xcode如何在框架项目中删除无效架构而不是在客户端应用程序中
- angular - 如何诊断为什么 Mac 和 iOS 上的 Safari 中的 Angular 应用程序没有将 cookie 发送回服务器 API?
- jquery - 试图在 ajax post ASP.NET MVC 中传递 antiforgerytoken
- lua - Love 2D 摇杆输入管理
- numpy - 如何过滤掉特定维度的元素
- javascript - 使用 JavaScript 动态加载文件夹/子文件夹中的所有图像