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错误?他们是否使用不同的方法来处理问题?
答案 0 :(得分:2)
substring
大于字符串的StringIndexOutOfBoundsException
时, beginIndex
方法才会抛出length
,如下面代码所示
String
类substring
方法):
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);
}
这里:
尝试将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];
}
当然它会给你错误!