编程里面涉及最多的就是字符串,整天对字符串进行比较,大小写切换等操作,真心比较烦心。当然要是习惯了使用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
谢谢~