我在尝试反转字符串时遇到问题,它表示我遇到“字符串索引超出范围”错误。感谢您的帮助,我将在下面留下代码和错误。
public static void main(String[] args) {
System.out.println("Welcome to the Text Converter.");
System.out.println("Available Actions:");
System.out.println("\t1337) convert to 1337 speak");
System.out.println("\trev) reverse the string");
System.out.println("\tquit) exit the program");
System.out.println();
System.out.print("Please enter a string: ");
String userString;
String action;
Scanner scnr = new Scanner(System.in);
userString = scnr.nextLine();
System.out.print("Action (1337, rev, quit): ");
action = scnr.nextLine();
while (!action.equals("quit")) {
if (action.equals("rev")) {
actionReverse(userString);
}
if(action.equals("1337")) {
action1337(userString);
}
}
public static String actionReverse(String userString) {
String newString = "";
for(int i=userString.length(); i>=0; --i) {
newString = newString + userString.charAt(i);
}
return newString;
}
错误消息:
线程“主”中的异常java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:3 在java.lang.String.charAt(String.java:658) 在TextConverter.actionReverse(TextConverter.java:82) 在TextConverter.main(TextConverter.java:19)
答案 0 :(得分:0)
它说索引超出范围,您需要编写
Microsoft.AspNetCore.App
,因为字符串是零索引的。
我要通过的同时,我想提一下,这种字符串连接被认为相当慢,如果性能很重要,则应使用<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
...
</Project>
进行字符串连接。
答案 1 :(得分:0)
问题的根源是一个一次性的错误。 String
的索引从0开始,到str.length() - 1
结束。
因此,您的for
循环应如下所示:
for(int i = userString.length() - 1; i >= 0; --i) {
newString += userString.charAt(i);
}
但是,更有效的反转String
的方法是使用StringBuilder
。由于StringBuilder
是可变的,因此使用它而不是直接附加到String
上在性能上要好得多。
public static String actionReverse(String userString) {
return new StringBuilder(userString).reverse().toString();
}
答案 2 :(得分:0)
似乎最后一项的索引不正确。
将其更改为Selenium
IIS