为什么我一直让String超出范围?

时间:2011-10-12 03:06:21

标签: java string substring indexof

return nameString.substring(nameString.indexOf(" ", 0), nameString.lastIndexOf(" ", 0));

为什么一直会返回错误?我只想将字符串从第一个出现的空格字符返回到字符串中最后出现的空格?

2 个答案:

答案 0 :(得分:4)

  

lastIndexOf

public int lastIndexOf(String str,
                       int fromIndex)
     

返回指定子字符串最后一次出现的字符串中的索引,从指定的索引开始向后搜索...如果不存在这样的值,则返回-1。

删除indexOf和lastIndexOf的, 0参数。当您将fromIndex为0传递给lastIndexOf时,它会从字符串的开头搜索向后以查找匹配项。当它找不到它时,它返回-1,这是子串的无效参数。

return nameString.substring(nameString.indexOf(" "), nameString.lastIndexOf(" "));

答案 1 :(得分:1)

让我们分解你的问题

String nameString = "Your name is Matt";

indexOf: 它从左到右开始阅读&找到第一个匹配的char时停止,并返回char的位置

 nameString.indexOf("M", 0) /* returns 13 */
 nameString.indexOf(" ", 0) /* returns 4 (it's placed at 4'th position in the given sentence) */

lastIndexOf: 它从右向左开始阅读并在char匹配时停止并返回匹配字符的位置

nameString.lastIndexOf("t", 17)  /* returns 16 */
nameString.lastIndexOf(" ", 17)  /* returns 12 */
nameString.lastIndexOf(" ", 0)  /* returns -1, 

警告:你错误地给出了位置0,它从右向左读取并发现没有匹配所以返回-1) * /