1. 程式人生 > >C++、Java、python 字串比較

C++、Java、python 字串比較

學的語言越多,就會特別容易造成語言的混亂,故此特地整理一部分的語言比較內容,希望可以給大家提供一些幫助。

本篇比較字串:

 字串基本的方法有一下幾種:取字元、長度、遍歷、子串、查詢、比較、修改(增刪改)、大小寫、去掉空白。下面就以上幾個特性進行比較:

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:類似函式是findpython 還有 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
換句話說,該函式會返回替換後的字串副本,並不會改變原來的字串。(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

大小寫

C++:無 Java:toUpperCase toLowerCase
  
      String x="abcD";
      System.out.println(x.toLowerCase());
      System.out.println(x.toUpperCase());
輸出: abcd
ABCD
python: lower upper
x="abcD"
print x.lower()
print x.upper()
輸出: 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 python: startswith endswith
x="abcD"
print x.startswith('a')
print x.endswith('D')
輸出: True True

去掉前後空白:

C++:無 Java:trim() python:strip lstrip rstrip