当前位置: 首页 > 知识库问答 >
问题:

使用substring()和charAt()方法的Java程序[closed]

凤凡
2023-03-14

我尝试使用charAt和子字符串,但被卡在子字符串部分,输出结果应该交换第一个和最后一个字符并打印出来。

import java.util.*;

public class Q1 {

    public static void main(String[] args) {
        while(true) {
            char choice = getChoice();
            switch(choice) {
                case 'a': printDetails(); break; //exit switch
                case 'b': getThreeDecPrintLargestAndSmallest(); break;
                case 'c': printNumberRange(); break;
                case 'd': isTriangle(); break;
                case 'e': isPrime(); break;
                case 'f': getAndProcessTenInterger(); break;
                case 'g': getStringAndSwap(); break;
                case 'q': break;
                default : System.out.println("Invalid choice:");
            }
            if(choice=='q') {
                break; // exit while true
            }
        }
        System.out.println("Quit");
    }

    private static void getStringAndSwap() { //g
        try (Scanner kb = new Scanner(System.in)) {
            String stringAndSwap = "";
            
            while (true) {
                System.out.println("Enter a String up to Max of 50 Characters:");
                stringAndSwap =kb.nextLine();
                if  (stringAndSwap.length() >50) {
                    System.out.println("String is too long");
                }else {
                    break;
                }
            }
            char beginning = stringAndSwap.charAt(0);
            char end = stringAndSwap.charAt(-1);
            
            stringAndSwap.substring(beginning, end);
            stringAndSwap.substring(end, beginning);
            
                return System.out.println(stringAndSwap);
            
            System.out.println(stringAndSwap);
    }
}

共有1个答案

爱亮
2023-03-14

正如注释中指出的,带有参数-1的方法charAt不会返回字符串的最后一个字符,但它会抛出一个StringIndexOutOfBoundsException。要检索字符串的最后一个字符,您需要依赖long()方法并编写如下内容:

myString.charAt(myString.length() - 1);

此外,String类表示不可变的对象,因此如果需要操作String,则需要使用StringBuilder类。您的交换方法应该如下所示:

private static void getStringAndSwap() {
    try (Scanner kb = new Scanner(System.in)) {
        String stringAndSwap = "";

        while (true) {
            System.out.println("Enter a String up to Max of 50 Characters:");
            stringAndSwap = kb.nextLine();
            if (stringAndSwap.length() > 50) {
                System.out.println("String is too long");
            } else {
                break;
            }
        }

        //Creating a StringBuilder based on the String read
        StringBuilder strBld = new StringBuilder(stringAndSwap);

        //Saving the first character of the string in a temp var
        char beginning = strBld.charAt(0);

        //Setting the last character of the string in place of the first character
        strBld.setCharAt(0, strBld.charAt(strBld.length() - 1));

        //Setting the last character of the string with the first character previously saved
        strBld.setCharAt(strBld.length() - 1, beginning);

        
        //Printing the result 
        System.out.printf("Swapped string is %s%n", strBld);
    }
}
 类似资料:
  • 问题内容: 我想在很大的字符串的特定位置找到字符。但是我无法使用方法,因为范围超出了int的范围。有什么调整吗? 问题答案: 在Java中,字符串由字符数组支持。数组的理论大小受的最大值限制,因此不可能有超过2 31 -1个字符的字符串开头。 要解决此问题,您可以创建自己的使用多个数组或字符串作为存储的字符串类。

  • 我正在制作一个彩票程序,模拟一个人选择6个中奖号码,并使用多种方法抽奖中奖号码。 这是一个示例输出 我的问题是,查找匹配总数的方法不起作用,我不知道如何修复它。用户输入的数字和彩票随机数都是数组 这是我的代码:

  • 我正在编写一个程序,接收用户的出生信息,年、月、日、时、分。该计划如下: 使用< code>getRangedInt方法输入一个人出生的年份(1965-2000)、月份(1-12)、日期*、小时(1-24)、分钟(1-59)。 注意:使用switch()条件选择器结构将用户限制在其出生月份的正确天数内。例如,如果他们出生在2月[1-29]日、10月[1-31]日。提示:这里只有几个组,而不是12个

  • 如果第一个字符串在字典上大于第二个字符串,它应该返回1,如果等于返回0,则返回-1。在某些情况下正确地返回1,-1,0,但对于这个str1和str2,返回结果与所需的输出相反。

  • 问题内容: 我在此代码块中有一个错误。调试器提示原因是这一行代码 该代码的作用是寻找和之间的匹配。我必须逐一检查secretWord字母的长度,如果有匹配的字母,则返回true。如果不是,则返回false …但是当假定只是返回false时,程序崩溃…我猜想这与该行有关,但不知道到底是什么 附带说明一下,我将这段代码正确地完成了,将getSecretWorld()方法分配给String以便我可以使用

  • 问题内容: 我一直想知道java中String / StringBuilder / StringBuffer的charAt函数的实现是什么?还有StringBuffer / StringBuilder中的deleteCharAt()呢? 问题答案: 对于,和,是恒定时间的运算。 对于和,是线性时间运算。 并具有非常相似的性能特征。主要区别在于前者是(因此是线程安全的)而后者则不是。