前言:因为工作要求,要从C++转java,为了学好java同时回顾对C++的掌握,写下此系列文章,以供自己学习与回顾。
String并非C++和JAVA的内置类型,而是标准库类型,所以在C++中需要包含String头文件,JAVA 则是通过java.lang包中的String类来创建。
特定声明:当C++中用printf输出string时会出错,因为printf输出字符串是针对char *的,换言之,printf只能输出C语言中的内置数据,string不是c语言内置数据。更深入的来说:string类型的对象并非单单只有字符串,其内还有许多用于操作的函数,于是&s并非字符串的首地址,而是这个对象的首地址。
**一、字符串的创建与初始化**
C++中 string的初始化
string s1;
1 string s2=s1;
2 string s3="abc"此为拷贝初始化 String s(“abc”);此为直接初始化
3 stirng s4(10,'d');
可以用字符串char a[]={'a','n','v'};给string对象赋值,但输出string对象时会出现乱码。
Java中string的初始化
char a[]={'g','o','o','d'};
1 String(char a[])
String s=new String(a);
2 String(char a[],int offset,int length)
String s=new String(a,1,2);等价于 String s=new String(“oo”);
3 String s=“oo”;只有拷贝初始化。
4 String s1=s;
**二、字符串对象的比较**
在C++中可以用==和!=来比较两个字符串是否相同。而 JAVA则不行,它会比较的是二者的地址是否相同。所以要通过成员函数equals()(区分大小写)和equalsIgnoreCase()(不区分大小写)来判断两个字符串内容是否相同。同理,C++可以通过<、>、<=、>=对两个字符串进行比较,而JAVA则通过compareTo()比较两个字符串,若对象大于参数则返回整数,小于返回复数,等于返回0。
**三、字符串的访问**
访问字符串中的某一字符:C++中遍历每个字符for(auto c:str)同时可以通过atr[i]的方式访问字符串中的某一字符;JAVA需要通过成员函数你chatAt(i)来访问。
改变字符串大小写:C++只能遍历每个字符,通过标准库函数逐个改变。JAVA可已通过string成员函数toLowerCase()和toUpperCase()实现
获取字符串长度:C++:str.length() java:str.length()
字符串查找:找到某字符串首次出现的位置C++:str.find(str1) java:str.indexOf(str1)
找到某字符串最后一次出现的位置C++:str.rfind(str1) java:str.lastindexOf(str1)
同时C++还提供:
find_first_of():在一个目标串中进行查找,返回值是第一个与指定字符组中任何字符匹配的字符位置。如果没有查找到匹配的内容,则返回npos。
find_last_of():在一个目标串中进行查找,返回最后一个与指定字符组中任何字符匹配的字符位置。如果没有查找到匹配的内容,则返回npos。
find_first_not_of():在一个目标串中进行查找,返回第一个与指定字符组中任何字符都不匹配的元素位置。如果找不到那样的元素则返回npos。
find_last_not_of():在一个目标串中进行查找,返回下标值最大的与指定字符组中任何字符都不匹配的元素的位置。若找不到那样的元素则返回npos。
获取子字符串:C++:str.substr(int begin,int length)
Java:(1)str.substring(int beginIndex)从指定位置开始到整个字符串结束的子串
(2)str.substring(int begindex,endindex)从指定位置开始到指定位置结束的子串
字符串替换:C++:string& replace (size_t pos, size_t len, const string& str); string& replace (const_iterator i1, const_iterator i2, const string& str);
JAVA:str.replace(char oldchar, char newchar)
java还提供以下功能: (1)判断字符串的开始与结束 str.startsWith()判断当前字符串对象的前缀是否是参数指定的字符串
str.endsWith()判断当前字符串对象的后缀是否是参数指定的字符串
(2)字符串分割:str.split(String sifgn) str.split(String sign,in limit)第二个增加了分割次数限制。
(3)格式化字符串,str.format(String format,Object...args) String str=String.format("%d",5)
(4)正则表达式,判断字符是否符合某一格式:str.matches(正则表达式);
(5)字符串生成器:字符串创建成功后,长度是固定的,当通过+进行操作时会创建新的 String实例,因而会极大的增加系统的开销,为此java提供了 StringBuilder类来替代string进行频繁附加字符的操作。该类通过成员函数 toString()输出字符串结果。此类还提供append() 、insert(int offset ,arg) 、delete(int start,int end) 方法。
(6)去除字符串的前导空格和尾部空格:str.trim()