去除string字符串中的空格

本文介绍三种去除C++字符串首尾空格的方法:利用标准库函数find_first_not_of和find_last_not_of、使用boost库中的trim函数及通过模板实现自定义trim函数。
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法:
    1.使用string的find_first_not_of,和find_last_not_of方法

/*
Filename : StringTrim1.cpp
Compiler : Visual C++ 8.0
Description : Demo how to trim string by find_first_not_of & find_last_not_of
Release : 11/17/2006
 */

#include <iostream>
#include <string>

std::string& trim(std::string &);

int main()
{
    std::string s = " Hello World!! ";
    std::cout << s << " size:" << s.size() << std::endl;
    std::cout << trim(s) << " size:" << trim(s).size() << std::endl;

    return 0;
}

std::string& trim(std::string &s)
{
    if (s.empty())
    {
        return s;
    }

    s.erase(0,s.find_first_not_of(" "));
    s.erase(s.find_last_not_of(" ") + 1);
    return s;
}

2.使用boost库中的trim,boost库对提供很多C++标准库没有但是又非常常用和好用的库函数,例如正则表达式,线程库等等。

/*
Filename : boostStringTrim.cpp
Compiler : Visual C++ 8.0 / ISO C++ (boost)
Description : Demo how to boost to trim string
Release : 02/22/2007 1.0
*/

#include <iostream>
#include <string>
#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

int main() {
  string s = " hello boost!! ";
  trim(s);
  cout << s << endl;
}

3.使用template(我用GCC编译不通过,用VS2005却可以)

/*
Filename : stringTrim1.cpp
Compiler : Visual C++ 8.0
Description : Demo how to trim string by other method.
Release : 11/18/2006
*/

#include <string>
#include <iostream>
#include <cwctype>

template <class T>
std::basic_string<T>& trim(std::basic_string<T>&);

int main( )
{
    std::string s = " Hello World!! ";
    std::cout << s << " size:" << s.size() << std::endl;
    std::cout << trim(s) << " size:" << trim(s).size() << std::endl;

    return 0;
}

template <class T>
std::basic_string<T>& trim(std::basic_string<T>& s)
{
    if (s.empty()) {
        return s;
  }

    std::basic_string<T>::iterator c;
    // Erase whitespace before the string

    for (c = s.begin(); c != s.end() && iswspace(*c++);); s.erase(s.begin(), --c);

    // Erase whitespace after the string

    for (c = s.end(); c != s.begin() && iswspace(*--c);); s.erase(++c, s.end());

    return s;
}

在 Java 中,有多种方法可以去除字符串中的空格,以下是几种常见的方法: ### 使用 `replaceAll` 方法 `replaceAll` 方法可以使用正则表达式来替换字符串中的空格。可以使用 `" "` 匹配单个空格,也可以使用 `\\s` 匹配所有空白字符(包括空格、制表符、换页符等)。 ```java public class Main { public static void main(String[] args) { String input = "This is a string with spaces"; // 用空字符串替换所有空格 String result1 = input.replaceAll(" ", ""); System.out.println(result1); // 使用正则表达式替换所有空格字符 String result2 = input.replaceAll("\\s", ""); System.out.println(result2); } } ``` ### 使用 `replace` 方法(Java 11 及更高版本) `replace` 方法可以直接将字符串中的指定字符替换为另一个字符。使用它可以简单地将所有空格替换为空字符串。 ```java public class Main { public static void main(String[] args) { String input = "This is a string with spaces"; // 用空字符串替换所有空格 String result = input.replace(" ", ""); System.out.println(result); } } ``` ### 使用 `replace` 方法结合循环 通过遍历字符串的每个字符,将非空格字符添加到结果字符串中,从而去除所有空格。 ```java public class Main { public static void main(String[] args) { String input = "This is a string with spaces"; String result = ""; for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (c != ' ') { result += c; } } System.out.println(result); } } ``` ### 使用 `String.trim()` 方法 `trim()` 方法只能去除字符串首尾的空格,对于字符串中间的空格不会处理。 ```java public class Main { public static void main(String[] args) { String input = " This is a string with spaces "; // 去除首尾空格 String result = input.trim(); System.out.println(result); } } ``` ### 使用 `replaceAll(" +", "")` 该方法可以匹配并去除所有连续的空格。 ```java public class Main { public static void main(String[] args) { String input = "This is a string with spaces"; // 匹配并去除所有连续的空格 String result = input.replaceAll(" +", ""); System.out.println(result); } } ``` ### 使用 `replaceAll("\\s*", "")` 可以替换大部分空白字符,不限于空格,`\\s` 可以匹配空格、制表符、换页符等空白字符的其中任意一个。 ```java public class Main { public static void main(String[] args) { String input = "This\tis\na string with spaces"; // 替换大部分空白字符 String result = input.replaceAll("\\s*", ""); System.out.println(result); } } ``` ### 使用 `StringUtils.deleteWhitespace(str)` 这是 `StringUtils` 类中封装的方法,可以去除所有空格,并且可以匹配空格、制表符、换页符等空白字符的其中任意一个。不过需要引入 Apache Commons Lang 库。 ```java import org.apache.commons.lang3.StringUtils; public class Main { public static void main(String[] args) { String input = "This is a string with spaces"; // 去除所有空格 String result = StringUtils.deleteWhitespace(input); System.out.println(result); } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值