在另一种方法中出现“字符串索引超出范围”错误?

时间:2019-10-24 22:49:53

标签: java

我在尝试反转字符串时遇到问题,它表示我遇到“字符串索引超出范围”错误。感谢您的帮助,我将在下面留下代码和错误。

    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)

3 个答案:

答案 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