给定一个字符串,返回“向左旋转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错误,是什么导致的呢?
现在,我知道此错误与引用超出字符串范围的值有关,并了解了创建子字符串时这是如何工作的。真正令我困惑的是,如何添加两个看似有效的字符串会给我这个错误?
我可以通过传递一个大于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()代替。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。