学的语言越多,就会特别容易造成语言的混乱,故此特地整理一部分的语言比较内容,希望可以给大家提供一些帮助。
本篇比较字符串:
字符串基本的方法有一下几种:取字符、长度、遍历、子串、查找、比较、修改(增删改)、大小写、去掉空白。下面就以上几个特性进行比较:
C++ | Java | python | |
取字符 | [] | [] | [] |
长度 | length | length | len |
遍历 | iterator | for i in str | |
子串 | substr | substring | [:] |
查找 | find rfind | indexOf lastIndexOf | find rfind |
比较 | compare | compareTo | cmp |
修改 | replace | replace | |
大小写 | toUpperCase toLowerCase | upper lower | |
去掉空白 | trim | strip lstrip rstrip |
类型名:
C++:string
Java: String
python: str
取字符:
C++: 取字符可以使用at( )函数或者[ ]来取得。
Java: 取字符可以使用charAt( )函数或者[ ]来取得。
python:取字符可以使用[ ]
结论:
最佳使用方式是[ ],因为好记嘛。
长度:
C++: 使用string.size() 或者string.length()
Java: 使用String.length()来获得长度
python: 使用len(str)来获得长度
结论:
推荐C++和Java使用length函数,python使用len
遍历:
C++ :
for (string::const_iterator it = x.begin(); it != x.end(); it++)
{
cout << *it << ' ';
}
Java:
使用索引遍历。
python:
for i in '123456789':
print i
子串:
C++:string
.substr
(int index,int length)
string x = "123456789";
cout<<x.substr(2, 2);
输出:34
Java: String.
substring
(int index, int end)
String xString="123456789";
System.out.println(xString.substring(2,4));
输出:34
python: str[int index:int end]
<span style="color: rgb(51, 0, 0);">x="123456789"
print x</span><span style="color:#ff0000;">[2:4]</span>
输出:34
查找
C++:size_type string.
find
(char x,size_type pos=0) string.find(const *x,size_type pos=0)
从pos位置开始查找字符串或者某个字符,返回找到的位置,如果找不到返回-1.C++还有rfind
string x = "123456789";
int i = x.find("43");
cout << i << ' ';
i = x.find('4');
cout << i << endl;
输出:-1 3
Java: 和C++相似方法是
indexOf
(),Java还有lastIndexOf()。 Java还有contains(String sub)和matches(String tregx)
String x="123456789";
System.out.print(x.indexOf("43"));
System.out.println(x.indexOf('4'));
输出:-1 3
python:类似函数是
find
python 还有 rfind
x="123456789"
print x.find('43'),x.find('4')
输出: -1 3
实际python中还有另外一个函数是index,功能和find类似。但是index函数找不到的时候会返回exception,所以不建议使用。
比较
C++的是:string.compare(const char*), string.compare(string),大于返回正数(1) 等于返回0 小于返回负数(-1)。
string x = "123456789";
cout << x.compare("123456789") << ' ';
cout << x.compare("223456789") << ' ';
cout << x.compare("113456789") << endl;
输出:0 -1 1
Java的是:compareTo,
String x="123456789";
System.out.print(x.compareTo("123456789"));
System.out.print(x.compareTo("223456789"));
System.out.println(x.compareTo("113456789"));
输出:0 -1 1
python的是:cmp(str,str)
x="123456789"
print cmp(x,'123456789'),cmp(x,'223456789'),cmp(x,'113456789')
输出: 0 -1 1
相等
C++: ==
Java:equals
python: ==
修改(增删改)
修改操作完全可以通过+和子串来达成目的。
C++:严格说来C++没有正式的字符串替换函数,C++中的string类的replace函数,使用的是位置来作为参数进行替换的。replace(begin,end,new),该函数不建议使用,完全可以通过substr和+来实现,完全没有必要记住这个函数。
Java:replace(old,new)。
用新的字符(串),替换旧的字符(串)
String x="123456789";
System.out.println(x.replace('1', '0'));
System.out.println(x.replace("23", "ab"));
System.out.println(x);
输出结果是:
023456789
1ab456789
123456789
1ab456789
123456789
换句话说,该函数会返回替换后的字符串副本,并不会改变原来的字符串。(Java和python中的字符串,无法修改,但是C++的可以)
实际上java中还存在,replaceAll(string regx,string new) replaceFirst(String regx,String new)这个函数
python:replace 类似于java的
x="123456789"
print x.replace("123","000")
print x
输出:
000456789
123456789
123456789
大小写
C++:无
Java:toUpperCase toLowerCase
String x="abcD";
System.out.println(x.toLowerCase());
System.out.println(x.toUpperCase());
输出:
abcd
ABCD
ABCD
python: lower upper
x="abcD"
print x.lower()
print x.upper()
输出:
abcd
ABCD
ABCD
startswith 和endswith:
C++:无(使用compare和substr实现)
Java:startsWith endsWith
String x="abcD";
System.out.println(x.startsWith("ab"));
System.out.println(x.endsWith("D"));
输出:
true
true
true
python: startswith endswith
x="abcD"
print x.startswith('a')
print x.endswith('D')
输出:
True
True
去掉前后空白:
C++:无
Java:trim()
python:strip lstrip rstrip