删除特殊空格

本文介绍了一种去除字符串中包括特殊空格在内的所有类型空格的方法。通过使用正则表达式匹配任何种类的空格字符,解决Java中replace方法无法去除特定Unicode空格的问题。

需求:去除字符串里的所有空格

做法

System.out.println("指南 修 订版".replace(" ", ""));

出现问题:"南 修"之间的空格去除不了

原因:"南 修"这个字符串里有一个特殊空格,对应的Unicode码是\u0026\u0023\u0031\u0036\u0030\u003b。而普通空格对应的Unicode码是"\u0020"

下面是用python打印出来的两个空格的区别:

In [1]: print('\u0026\u0023\u0031\u0036\u0030\u003b'.encode('utf8'))
b' '

In [2]: print('\u0020'.encode('utf8'))
b' '

在一个小伙伴的帮助下得到的解决方案

Pattern p = compile("\\p{Zs}");
Matcher m = p.matcher("指南 修       订版");
System.out.println(m.replaceAll(""));

\p{Zs} will match any kind of space character

转载于:https://www.cnblogs.com/goingforward/p/9831019.html

### 如何在 C++ 中移除字符串末尾的空格 在 C++ 编程中,可以通过自定义函数来实现删除字符串末尾的空格功能。以下是基于标准库 `std::string` 的一种常见方法: #### 自定义函数实现 通过遍历字符串并找到最后一个非空白字符的位置,可以有效地移除字符串末尾的所有空格。 ```cpp #include <iostream> #include <string> #include <algorithm> // std::find_if 和 std::isspace // 定义一个函数用于移除字符串末尾的空格 std::string rtrim(const std::string& str) { auto it = std::find_if(str.rbegin(), str.rend(), [](char ch) { return !std::isspace(static_cast<unsigned char>(ch)); }).base(); return std::string(str.begin(), it); } int main() { std::string testStr = "Hello World! "; // 输出原始字符串 std::cout << "\"" << testStr << "\"" << std::endl; // 移除末尾空格后输出 std::string result = rtrim(testStr); std::cout << "\"" << result << "\"" << std::endl; return 0; } ``` 上述代码利用了 `<algorithm>` 头文件中的 `std::find_if` 函数以及 `<cctype>` 中的 `std::isspace` 函数[^2]。该算法从右向左查找第一个不是空白字符的位置,并返回一个新的子字符串作为结果。 --- ### 使用第三方工具或扩展库 如果项目允许引入外部工具,则可考虑使用 Qt 提供的功能强大的 `QString` 类型及其内置方法。例如,`QString::trimmed()` 方法能够快速移除字符串两端的所有空白字符(包括制表符 `\t` 和换行符 `\n`),而不仅仅是空格[^1]。 对于纯 C++ 实现的需求来说,推荐优先采用标准库的方式完成此任务;但如果已经处于跨平台开发环境或者熟悉 Qt 框架的话,也可以充分利用其封装好的 API 来简化编码过程。 --- ### 常见错误及注意事项 当尝试解决类似问题时需要注意以下几点: - **边界条件**:确保输入为空的情况被妥善处理。 - **多字节字符支持**:某些情况下可能涉及 Unicode 或其他复杂编码集下的字符串操作,需额外小心对待特殊字符的行为差异。 - **性能优化**:针对非常大的数据量场景下应评估不同解决方案的时间复杂度与空间消耗情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值