开发者社区> 问答> 正文

Java字符串串联错误“字符串索引超出范围:-1”

给定一个字符串,返回“向左旋转n”版本,其中前n个字符移至末尾。

leftN("Hello",2) → "lloHe" leftN("java",0) → "java" leftN("Hi,1") → "iH" 所以我写了以下内容:

package string;

public class LeftN { public static String leftN(String str, int n) { if (str.length() > 1 && n > 0) { String a = str.substring(n); String b = str.substring(0, n); return a + b; } else { return str; } } } 当我仅返回a或b时,我得到一个有效的输出(如果我将a和b的输出添加到paper,我将得到旋转了n次的字符串)。但是,当我返回a + b的连接时,我得到的字符串索引超出了范围:-1错误,是什么导致的呢?

现在,我知道此错误与引用超出字符串范围的值有关,并了解了创建子字符串时这是如何工作的。真正令我困惑的是,如何添加两个看似有效的字符串会给我这个错误?

展开
收起
小六码奴 2019-10-03 19:33:52 944 0
1 条回答
写回答
取消 提交回答
  • 我可以通过传递一个大于str长度的n来重现你的问题:

    leftN("abc", 4); 结果:

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.base/java.lang.String.substring(String.java:1850) at Ideone.leftN(Main.java:12) at Ideone.main(Main.java:22) 您需要处理n太大的情况。例如:

    扔一个 IllegalArgumentException 使用n % str.length()代替。

    2019-10-09 16:22:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载