java中的String.substring()

时间:2016-12-24 09:18:13

标签: java

import java.util.*;

public class Test2{
  public static void main(String[] args){
    String s1 = "Delivery";
    String s2 = s1.substring(8);
    System.out.println(s2);
  }
}

为什么这会给出一个空白区域?不应该排在第八位吗?

另外,为什么s1.charAt(8)会提示outOfBound错误?他们是否使用不同的方法来处理问题?

5 个答案:

答案 0 :(得分:2)

仅当substring大于字符串StringIndexOutOfBoundsException时,

beginIndex方法才会抛出length,如下面代码所示取自Stringsubstring方法):

int subLen = value.length - beginIndex;
if (subLen < 0) {
    throw new StringIndexOutOfBoundsException(subLen);
}

此外,Javadoc也解释了同样的问题,你可以看一下here

  

返回一个新字符串,该字符串是此字符串的子字符串。子串   从指定索引处的字符开始并扩展到   这个字符串的结尾。例子:

     

“unhappy”.substring(2)返回“happy”

     

“Harbison”.substring(3)返回“bison”

     

“空虚”.substring(9)返回“”(空字符串)

答案 1 :(得分:1)

case class PlayerStats(FirstName: String, LastName: String, Country: String, matchandscore: Map[String, Int]) val result: RDD[PlayerStats] = data .filter(!_.startsWith("FirstName")) // remove header .map(_.split(",")).map { // map into case classes case Array(fn, ln, cntry, mn, g) => PlayerStats(fn, ln, cntry, Map(mn -> g.toInt)) } .keyBy(p => (p.FirstName, p.LastName)) // key by player .reduceByKey((p1, p2) => p1.copy(matchandscore = p1.matchandscore ++ p2.matchandscore)) .map(_._2) // remove key 返回从索引string.substring(int id)开始的字符串的子字符串。 id是一个索引,但不是位置!

请记住,索引从0开始计数! 请检查Javadoc

id方法的部分如下所示:

subString

答案 2 :(得分:0)

如果beginIndex为负数或大于String的长度,则抛出 IndexOutOfBoundsException 。在你的情况下,beginIndex是8,String的长度也是8.这就是你没有得到IndexOutOfBoundsException的原因。

希望这有帮助!

答案 3 :(得分:0)

建议您在IDE中运行代码并进行调试 Step-Into方法substring和你的查询将被回答

检查Substring方法的源代码

 public String substring(int beginIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        int subLen = value.length - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
    }

这里:

  1. 开头索引是8,
  2. 8不小于0
  3. subLen = 0且不小于0
  4. 尝试将9传递给子字符串,然后得到

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.String.substring(String.java:1875)
        at com.iqp.standalone.Sample.main(Sample.java:14)
    

答案 4 :(得分:0)

请参阅此处有关字符串的Java文档:Java Strings Doc

您的s1长度是7.

charAt方法如下所示:

public char charAt(int index) {
    if ((index < 0) || (index >= value.length)) {
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index];
}

当然它会给你错误!