string Substring()在Java中引发StringIndexOutOfBoundsException
我有一个函数shortenDisplay(String longDisplay,String display),它通过substring()方法修剪显示。然而,如果显示器 如果传递给此方法的时间都比预期的长,则子字符串方法将 指向负索引并引发StringIndexOutOfBoundsException。我需要一种方法来解决这个问题,我的意思是让代码更干净、更高效,这样它就可以处理更长的字符串名。任何帮助都将不胜感激。提前谢谢。这是我的密码
private String shortenDisplay(String longDisplay, String display) {
final int displayLength = display.length();
final int totalLength = longDisplay.length();
final int numberOfCharsToRemove = totalLength - 36;
final int stop = displayLength - numberOfCharsToRemove;
final String beginning = longDisplay.substring(0, stop); //this line throws an error
final int endStart = stop + numberOfCharsToRemove;
final String end = longDisplay.substring(endStart);
String shortenedDisplay = beginning + end;
return shortenedDisplay;
}
例如,如果传入的参数是——
longDisplay-“嘿,这是一个非常长的字符串名称显示!!!!!!!”(64个字符)
显示-“嘿,我的名字是字符串”(21个字符)
根据函数shortenDisplay中的第三行代码:
int numberOfCharsToRemove:64-36=28个字符
int stop:21-28=-7//负指数
现有代码(要求)有一个特定的原因,因此代码逻辑需要保持不变,但有没有办法绕过这个负面索引,避免出现索引自动边界异常
# 1 楼答案
对该特定行的一个快速而肮脏的修复方法是使用
Math.max
来防止落入负值范围final String beginning = longDisplay.substring(0, Math.max(0, stop));
按照同样的推理,您需要保护对
substring
的另一个调用final String end = longDisplay.substring(Math.max(0, endStart));
你的代码中有一些神奇的数字,这让你很难推理。(3代表省略号吗?36代表什么?)。我认为重写代码以更好地展示意图将是一个巨大的胜利