String subsofBound和Arrayindexoutof在子字符串方面的界限有什么区别吗?

时间:2018-02-09 04:38:13

标签: java substring

假设我有以下代码:

#include <iostream> // for printf()
#include <cstdlib> // for exit(), perror()
#include <fstream> // for ifstream

using namespace std;

int main(int argc, char *argv[])
 {
  if (argc!=2) {
  // if argc is not 2, print an error message and exit

  cerr << "Usage: "<< argv[0] << " inputFile" << endl;
  exit(1); // defined in cstdlib

  }
return 0;

int num = 0;
ifstream ifs;

ifs.open(argv[1]);
string line;

do{
    getline(ifs, line);
    cout<<line<<endl;
    if(line == "duck"){num++;}


}while(!ifs.eof());

cout<<"There were"<<num<<"ducks in"<<argv[1]<< endl;

}

我想知道,为什么substring(i,i + 2)不会抛出indexoutofbound异常。因为我&lt; LEN-1。当访问索引i = len -2时,substring可以访问len -2,len -1和len;这里len应该导致异常。

1 个答案:

答案 0 :(得分:0)

String.substring()在其第一个参数上包含,而在第二个参数上是独占的。这意味着在最后一次迭代中,当i = len-2时,aSub将仅等于len-2和len-1处的字符串。 len被排除在外,字符串只会被设置为字符串的最后两个字符