如何优雅的写C++代码 Obotcha介绍(String类)

    编程里面涉及最多的就是字符串,整天对字符串进行比较,大小写切换等操作,真心比较烦心。当然要是习惯了使用std::string的话,实际上还是可以的。但是对比Java的String类,真心不得不说Java的还是比较方便的。所以Obotcha里面有一个类似Java String的类,就叫String。先看一下String的接口:

_String(std::string *v);

    _String(std::string v);

    _String(String v);

    _String(const char *v);

    _String(const char *v,int start,int length);

    _String(Integer v);

    _String(Boolean v);

    _String(Float v);

    _String(Double v);

    _String(Long v);

    _String(int v);

    _String(bool v);

    _String(float v);

    _String(double v);

    _String(long v);

    template <typename T>
    void split(String v,T t);

    ~_String();

    const char * toChars();

    char charAt(int index);

    String subString(int start,int end);

    bool contains(String val);

    String trim();

    String trimAll();

    int size();

    int indexOf(String v);

    String append(String s);

    String append(const char *p);

    Integer toInteger();

    Boolean toBoolean();

    Float toFloat();

    Double toDouble();

    Long toLong();

    int toBasicInt();

    bool toBasicBool();

    float toBasicFloat();

    double toBasicDouble();

    long toBasicLong();

    static String valueOf(Integer v);

    static String valueOf(Boolean v);

    static String valueOf(Double v);

    static String valueOf(Float v);

    static String valueOf(int v);

    static String valueOf(bool v);

    static String valueOf(double v);

    static String valueOf(float v);

    static String valueOf(const char *p);

    bool equals(String s);

    bool equals(std::string s);

    bool equals(const char *s);

    std::string getStdString();

    String toLowerCase();

    String toUpperCase();

    bool equalsIgnoreCase(String str);

    int indexOfIgnoreCase(String str);

    bool containsIgnoreCase(String val);

    bool isEmpty();

    bool matches(String regex);//Not Test
    
    sp<_String> replaceFirst(String regex,String v);

    sp<_String> replaceAll(String regex,String v);

    bool endsWith(String s);

    int lastIndexOf(String v);

    bool startsWith(String v);

基本上涵盖了大部分的字符串操作,例如查找,int转String,正则匹配等等。使用起来也比较方便:

String str = createString("AaAbAc");
if(!str->equalsIgnoreCase("aaabAC")) {
    break;
}

基本和Java接口差不多。String内部的实现没有什么特色,就是将std封装了一层。例如int转String的操作:

int _String::toBasicInt() {
    if(m_str == nullptr) {
        return 0;
    }

    if(!isIntNumber(m_str->data(),m_str->size())) {
        return 0;
    }

    std::stringstream ss;
    ss<<*m_str;
    int value;
    ss>>value;
    return value;
}

实际上就是使用了std::stringstream流做了转换。个人比较喜欢这种将相关操作聚合在一个class中的设计,这样方便使用者直接查找接口,也方便维护和开发。有兴趣的同学可以上github上看一下string整个设计:

https://github.com/wangsun1983/Obotcha/blob/master/lang/String.cpp

谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值