【问题标题】:Java unable to recognise special character after spaceJava无法识别空格后的特殊字符
【发布时间】:2021-08-13 03:06:07
【问题描述】:

我必须为以下问题编写一个程序:

我写了以下代码:

package secret_message;
import java.util.Scanner;
public class Secret_Message {
    public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        int lines, i, codenumber, k;
        String code, codepart, codechar2;
        char codecharacter1, codecharacter2;
        lines = sc.nextInt();
        codepart = "";
        for (i = 1; i<=lines; i++)
        {
            code = sc.next();
            codecharacter1 = code.charAt(0);
            codecharacter2 = code.charAt(1);
            codenumber = Character.getNumericValue(codecharacter1);
            for (k=1; k<=codenumber; k++)
            {
                codechar2 = Character.toString(codecharacter2);
                codepart = codepart + " " + codechar2;
            }
            System.out.println(codepart); 
            codepart = "";
        }
    } 
}

当我在每一行的输入没有空格时(例如,如果我写“9+”而不是“9+”),它可以完美运行。但是,例如,在编写“9 +”时,我收到以下错误:“字符串索引超出范围”。我尝试将代码中的codecharacter2 = code.charAt(1); 更改为codecharacter2 = code.charAt(2);codecharacter2 = code.charAt(3);,但没有成功。我还尝试使用code.replaceAll("\\s", ""); 创建一个新变量,但这也会删除“9 +”中的“+”。

我知道包含空格只会产生细微的差别,但问题明确说明了需要它。因此,我将不胜感激有关如何解决此问题的任何帮助!

【问题讨论】:

    标签: java whitespace symbols


    【解决方案1】:

    问题出在code = sc.next(); 这意味着您只从输入中获取第一个标记,即第一个字符。相反,您需要按照您的逻辑取整行,即,

    code = sc.nextLine();
    

    更好的解决方案是将整数和字符分开。检查以下代码:

        for (i = 1; i<=lines; i++)
        {
            codenumber= sc.nextInt();
            codechar2 = sc.nextLine().charAt(0);
            for (k=1; k<=codenumber; k++)
            {
                codepart = codepart + " " + codechar2;
            }
            System.out.println(codepart); 
            codepart = "";
        }
    

    【讨论】:

    • 感谢您的回答!我什至从未考虑过code = sc.next(); 可能是问题所在!事实上,我也意识到我之前的代码只适用于数字 0-9,而问题允许任何低于 80 的正整数。codenumber= sc.nextInt(); 帮助解决了这个问题!我还将codecharacter2 = code.charAt(1); 更改为codecharacter2 = code1.charAt((code1.length()) - 1);,效果很好!在修复了一些基本错误后,代码运行顺利:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2020-12-18
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多